前言
上一篇博客主要介绍了Java运算符的相关知识。
本篇博客将学习Java逻辑控制的相关知识,了解程序运行时的逻辑结果,掌握Java输入输出的方式,并结合起来,完成一个案例,加深理解。
一.顺序结构
顺序结构,顾名思义,按照代码书写的顺序一行一行执行。
- System.out.println("aaa");
- System.out.println("bbb");
- System.out.println("ccc");
-
-
- // 运行结果
- aaa
- bbb
- ccc
如果调整代码的书写顺序,则执行顺序也会发生变化。
- System.out.println("aaa");
- System.out.println("ccc");
- System.out.println("bbb");
-
-
- // 运行结果
- aaa
- ccc
- bbb
二.分支结构
1.if语句
1)单if格式
if ( 布尔表达式 ){// 语句}
如果布尔表达式中的结果为true,则会执行{ }内的语句;
如果布尔表达式中的结果为false,则会跳过{ }内的语句。
2)if…else格式
if ( 布尔表达式 ){// 语句 1} else {// 语句 2}
如果布尔表达式结果为true,则执行if中的语句;
否则,执行else中的语句。
例如:若小明成绩在90分以上,则奖励鸡腿,否则奖励大嘴巴子。
- int score = 92;
- if(score >= 90){
- System.out.println("吃个大鸡腿!!!");
- }else{
- System.out.println("挨大嘴巴子!!!");
- }
3)if...else if...else格式
有时,事情发展的分支可能会不止两种,只有if...else不能详细的描述发生的状况。
else if 可以描述更多更精细的场景。
if ( 布尔表达式 1 ){// 语句 1} else if ( 布尔表达式 2 ){// 语句 2} else {// 语句 3}
表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3
例如:考虑到学生自尊,不公开分数排名,因此
分数在 [90, 100] 之间的为优秀
分数在 [80, 90) 之前的为良好
分数在 [70, 80) 之间的为中等
分数在 [60, 70) 之间的为及格
分数在 [ 0, 60) 之间的为不及格
错误数据
代码如下:
- if(score >= 90){
- System.out.println("优秀");
- }else if(score >= 80 && score < 90){
- System.out.println("良好");
- }else if(score >= 70 && score < 80){
- System.out.println("中等");
- }else if(score >= 60 && score < 70){
- System.out.println("及格");
- }else if(score >= 0 && score < 60){
- System.out.println("不及格");
- }else{
- System.out.println("错误数据");
- }
2.switch语句
基本语法
switch ( 表达式 ){case 常量值 1 :{语句 1 ;break;}case 常量值 2 :{语句 2 ;break;}...default :{内容都不满足时执行语句 ;break;}}注意:break并非必写,若缺少break程序会不断向下执行.
执行流程:
- 先计算表达式的值
- 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束。
- 当表达式的值没有与所列项匹配时,执行default.
代码示例:根据 day 的值输出星期
- int day = 1;
- switch(day) {
- case 1:
- System.out.println("星期一");
- break;
- case 2:
- System.out.println("星期二");
- break;
- case 3:
- System.out.println("星期三");
- break;
- case 4:
- System.out.println("星期四");
- break;
- case 5:
- System.out.println("星期五");
- break;
- case 6:
- System.out.println("星期六");
- break;
- case 7:
- System.out.println("星期日");
- break;
- default:
- System.out.println("输入有误");
- break;
- }
注意事项:
- 多个case后的常量值不可以重复
- switch括号内不能是long类型,也不能说浮点型
- break 不要遗漏, 否则会失去 "多分支选择" 的效果
- switch 不能表达复杂的条件
- // 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.
- if (num > 10 && num < 20) {
- System.out.println("hehe");
- }
三.循环结构
1.while循环
基本语法格式:
while ( 循环条件 ){循环语句 ;}
循环条件为 true, 则执行循环语句; 否则结束循环.
代码示例:打印1-10的数字
- int num = 1;
- while (num <= 10) {
- System.out.println(num);
- num++;
- }
注意事项:
- 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
- 和 if 类似, while 后面的 { 建议和 while 写在同一行
- 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行
2.for循环
基本语法:
for ( 表达式① ; 布尔表达式② ; 表达式③ ){表达式④ ;}
注意事项:与while循环类似,不过多赘述.
代码示例:打印1~10的数字
- for (int i = 1; i <= 10; i++) {
- System.out.println(i);
- }
3.break与continue
1)break
break 的功能是让循环提前结束,当代码执行时遇到break,则会立即结束当前循环.
代码示例:找到100~200中第一个3的倍数
- int num = 100;
- while (num <= 200) {
- if (num % 3 == 0) {
- System.out.println("找到了 3 的倍数, 为:" + num);
- break;
- }
- num++;
- }
-
-
- // 执行结果
- 找到了 3 的倍数, 为:102
2)continue
continue 的功能是跳过这次循环, 立即进入下次循环.
代码示例:找到100~200中第一个3的倍数
- int num = 100;
- while (num <= 200) {
- if (num % 3 != 0) {
- num++; // 这里的 ++ 不要忘记! 否则会死循环.
- continue;
- }
- System.out.println("找到了 3 的倍数, 为:" + num);
- num++;
- }
当if中的布尔表达式为真,则会触发continue,跳过当前循环,进入下一次循环.
四.输入与输出
1.输出到控制台
基本语法:
System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出
println 输出的内容自带 \n, print 不带 \n
printf 的格式化输出方式和 C 语言的 printf 是基本一致的
2.从键盘输入
使用Scanner读取输入的字符串/整数/浮点数.
当使用Scanner时,会导入util的包.
System.in是一个标准的输入流对象,它通常用于从键盘接收输入.
代码示例:
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入你的姓名:");
- String name = sc.nextLine();
- System.out.println("请输入你的年龄:");
- int age = sc.nextInt();
- System.out.println("请输入你的工资:");
- float salary = sc.nextFloat();
- System.out.println("你的信息如下:");
- System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
- sc.close(); // 注意, 要记得调用关闭方法
- // 执行结果
- 请输入你的姓名:
- 张三
- 请输入你的年龄:
- 18
- 请输入你的工资:
- 1000
- 你的信息如下:
- 姓名: 张三
- 年龄:18
- 工资:1000.0
注:当想输入字符串时,可使用nextLine()方法.
当像输入整型时,可使用nextInt()方法.
输入浮点数时,可使用nextFlaot()方法.
五.案例(猜数字游戏)
接下,将上述只是结合起来,写一个猜数字游戏.
思路:首先,我们要生成一个随机数.在Java中,提供了Random类为我们生成随机数.
- Random random = new Random(); // 默认随机种子是系统时间
- int randomNum = random.nextInt(100);
然后,猜数字游戏需要我们根据提示不断的接近生成的随机数,在这过程中,我们将不断的从输入数据.
猜大时,控制台输出提示我们数字猜大了;
猜小时,控制台输出提示我们数字猜小了;
猜对时,则退出循环.
参考代码如下:
- import java.util.Random;
- import java.util.Scanner;
-
- public class Test4 {
- public static void main(String[] args) {
- Scanner scanner=new Scanner(System.in);
- Random random=new Random();
- Integer randomNum=random.nextInt(100);
- while (true){
- System.out.println("请输入要猜的数字");
- int num= scanner.nextInt();
- if(num==randomNum){
- System.out.println("恭喜你,猜对了,随机数为 "+randomNum);
- break;
- }else if(num
- System.out.println("猜小了");
- }else {
- System.out.println("猜大了");
- }
- }
- }
- }
我们还可以引入一个计数器,限制猜数字的次数.(这里就不实现了).
以上便是全部内容,如有不对,欢迎指正
评论记录:
回复评论: