目录
1. 顺序结构
2. 分支结构【与C略有不同】
2.1 if语句
2.2 switch语句
注意事项【与C不同】
3. 循环结构【与C略有不同】
3.1 while循环
* break和continue
3.2 for循环
3.3 do while循环
* 输入的判断(hasNext)
4. 猜数字游戏
1. 顺序结构
顺序结构比较简单,按照代码书写的顺序一行一行执行。
System.out.println("aaa"); System.out.println("bbb"); System.out.println("ccc"); // 运行结果aaabbbccc
如果调整代码的书写顺序, 则执行顺序也发生变化。
System.out.println("aaa"); System.out.println("ccc"); System.out.println("bbb"); // 运行结果aaacccbbb
2. 分支结构【与C略有不同】
2.1 if语句
语法格式1:
if(布尔表达式){
// 语句
}
注意:if中的表达式一定是布尔表达式。例如C语言中的“ if ( a )”,在Java语言中必须写成“ if (a!=0)”.
如果布尔表达式结果为true,执行if中的语句,否则不执行。
比如:小明,如果这次考试考到90分或以上,给你奖励一个鸡腿。
int score = 92; if(score >= 90){ System.out.println("吃个大鸡腿!!!"); }
语法格式2:
if(布尔表达式){
// 语句1
} else {
// 语句2
}
如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。
比如:小明,如果这次考到90分以上,给你奖励一个大鸡腿,否则奖你一个大嘴巴子。
int score = 92; if(score >= 90){ System.out.println("吃个大鸡腿!!!"); }else{ System.out.println("挨大嘴巴子!!!"); }
语法格式3:
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.2 switch语句
基本语法:
switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
}
default:{
内容都不满足时执行语句;
[break;]
}
}
执行流程:
先计算表达式的值 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束当表达式的值没有与所列项匹配时,执行defaultcase 和 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后的常量值不可以重复。break 不要遗漏, 否则会失去 "多分支选择" 的效果switch 不能表达复杂的条件(不能用switch语句判断区间)switch 虽然支持嵌套, 但是很丑,一般不推荐~
注意事项【与C不同】
switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int。【注意不能是long类型和boolean类型】引用类型:String常量串、枚举类型。使用long类型或boolean类型会报错:
可以使用字符串类型:
public static void main(String[] args) { String a = "hello"; switch(a){ case "true": System.out.println("true"); break; case "false": System.out.println("false"); break; default: System.out.println(a); } }
输出:
3. 循环结构【与C略有不同】
3.1 while循环
语法格式:
while(循环条件){ 循环语句;}
循环条件为 true, 则执行循环语句; 否则结束循环.
注意:while中的循环条件也必须是布尔表达式,这点与C语言不一样。
代码示例1: 打印 1 - 10 的数字
int num = 1; while (num <= 10) { System.out.println(num); num++; }
* break和continue
break
break 的功能是让循环提前结束.
代码示例: 找到 100 - 200 中第一个 3 的倍数
int num = 100; while (num <= 200) { if (num % 3 == 0) { System.out.println("找到了 3 的倍数, 为:" + num); break; } num++; } // 执行结果找到了 3 的倍数, 为:102
执行到 break 就会让循环结束.
continue
continue 的功能是跳过这次循环, 立即进入下次循环.
代码示例: 找到 100 - 200 中所有 3 的倍数
int num = 100; while (num <= 200) { if (num % 3 != 0) { num++; // 这里的 ++ 不要忘记! 否则会死循环. continue; } System.out.println("找到了 3 的倍数, 为:" + num); num++; }
执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句.
3.2 for循环
基本语法:
for(表达式①;布尔表达式②;表达式③){
表达式④;
}
执行过程:
①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②为false,循环结束。
例子,计算 1 - 100 的和:
int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println("sum = " + sum); // 执行结果5050
3.3 do while循环
语法格式:
do{
循环语句;
}while(循环条件);
先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。
【注意事项】
do while 循环最后的分号不要忘记 一般 do while 很少用到, 更推荐使用 for 和 while.
* 输入的判断(hasNext)
当我们以循环读入的结束判断作为while的循环条件的话,我们需要用到hasnext。
例如:使用 Scanner 循环读取 N 个数字,并求取其平均值
Scanner sc = new Scanner(System.in); int sum = 0; int num = 0; while (sc.hasNextInt()) { int tmp = sc.nextInt(); sum += tmp; num++; } System.out.println("sum = " + sum); System.out.println("avg = " + sum / num); sc.close();
// 执行结果 10 40.0 50.5 ^Z sum = 150.5 avg = 30.1
注意事项: 当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d).
这里对输入数据的判断方法是Random.nextInt(),如果输入的不是整数,或者输入的是ctrl+z,循环就会停止。
还有其他常用类型的循环输入判断方法:
4. 猜数字游戏
游戏规则: 系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "低 了", 如果输入的数字比该随机数大, 提示 "高了" , 如果输入的数字和随机数相等, 则提示 "猜对了" .
参考代码
import java.util.Random;import java.util.Scanner;public static void main1(String[] args) { Scanner sc = new Scanner(System.in);//扫描仪 Random rd = new Random(); //随机数生成器 //不输入参数,种子是时间戳 int num = rd.nextInt(100); //返回区间[0,100)的数字 System.out.println("请输出数字:(0-100)"); while(true){ int n = sc.nextInt(); if(n > num){ System.out.println("猜大了,请继续:"); }else if(n < num){ System.out.println("猜小了,请继续:"); }else{ System.out.println("恭喜你,猜对了!"); break; } } sc.close(); }
几点解析:
Random类是一个随机数生成器,使用时会自动导入包 java.util.Random。当调用构造方法Random( )时,如果不输入参数,则随机数种子是当前时间的时间戳;如果自己输入一个固定值,则每次产生的随机数都相同。【相当于C语言中 srand()函数与 time()函数 的结合】Randon.nexInt()方法会返回一个随机整数值。如果不输入参数,这个值的范围就是int类型的范围,即0~2^31-1。如果输入参数,则该值的范围就是[0, 参数值)(注意左边是闭区间,右边是开区间)。【相当于C语言中 rand()函数】本期分享完毕,感谢大家的支持Thanks♪(・ω・)ノ