程序流程控制
- 顺序结构
- 分支结构
- 循环结构
输入 Scanner
具体步骤
- 导包:import java.util.Scanner;
- Scanner 的实例化:Scanner scan = new Scanner(System.in);
- 调用 Scanner 类的相关方法(next() / nextXxx()),来获取指定类型的变量
java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import java.util.Scanner;
public class ScannerTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in);
System.out.println("请输入姓名:"); String name = scan.next(); System.out.println(name);
System.out.println("请输入你的芳龄:"); int age = scan.nextInt(); System.out.println(age);
System.out.println("请输入"); double weight = scan.nextDouble(); System.out.println(weight);
System.out.println("你是否相中我了呢?(true/false)"); boolean isLove = scan.nextBoolean(); System.out.println(isLove);
System.out.println("请输入你的性别:(男/女)"); String gender = scan.next(); char genderChar = gender.charAt(0); System.out.println(genderChar); } }
|
3. Tip:
需要根据相应的方法,来输入指定类型的值。
如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException,导致程序终止。
1. 分支结构(if——else)
1. 三种结构
第一种:
第二种:二选一
1 2 3 4 5
| if(条件表达式){ 执行表达式1 }else{ 执行表达式2 }
|
第三种:n 选一
1 2 3 4 5 6 7 8 9 10 11
| if(条件表达式){ 执行表达式1 }else if(条件表达式){ 执行表达式2 }else if(条件表达式){ 执行表达式3 } ... else{ 执行表达式n }
|
2. java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class IfTest { public static void main(String[] args) { int heartBeats = 67; if(heartBeats < 60 || heartBeats > 100){ System.out.println("需要进一步检查"); } System.out.println("检查结束");
int age = 23; if(age < 18){ System.out.println("可以看动画片了"); }else { System.out.println("可以看大动画片了"); }
if(age < 0){ System.out.println("输入的数据非法"); }else if(age < 18){ System.out.println("青少年模式"); }else if(age < 35){ System.out.println("青壮年模式"); }else if(age < 60){ System.out.println("中年模式"); }else if(age < 120){ System.out.println("老年模式"); }else if(age > 120){ System.out.println("成仙模式"); } } }
|
3. Tip
- else 结构是可选的。
- 针对于条件表达式:
- 如果条件表达式之间没有交集的关系,判断和执行语句声明与在上面还是下面无关。
- 如果条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
- 如果条件表达式之间有包含的关系,需要将范围小的声明在范围大的上面。否则,范围小的就不会执行了。
- if-else 结构是可以相互嵌套的。
- if-else 结构中的执行语句只有一行时,对应的{}可以省略的。但是,不建议大家省略。
2. 分支结构(switch-case)
1. 结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| switch(表达式){ case 常量1: 执行语句1; //break;
case 常量2: 执行语句2; //break;
...
default: 执行语句n; //break;
}
|
2. java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class SwitchCaseTest { public static void main(String[] args) { String season = "summer"; switch (season){ case "spring": System.out.println("春暖花开"); break; case "summer": System.out.println("夏日炎炎"); break; case "autumn": System.out.println("秋高气爽"); break; case "winter": System.out.println("冬雪皑皑"); break; default: System.out.println("季节输入有误"); break; } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| import java.util.Scanner;
public class SwitchCaseExer { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入year:"); int year = scan.nextInt(); System.out.println("请输入month:"); int month = scan.nextInt(); System.out.println("请输入day:"); int day = scan.nextInt();
int sumDays = 0; switch(month){ case 12: sumDays += 30; case 11: sumDays += 31; case 10: sumDays += 30; case 9: sumDays += 31; case 8: sumDays += 31; case 7: sumDays += 30; case 6: sumDays += 31; case 5: sumDays += 30; case 4: sumDays += 31; case 3: if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){ sumDays += 29; }else { sumDays += 28; } case 2: sumDays += 31; case 1: sumDays += day; } System.out.println(year + month + "月" + day + "日是当年的第" + sumDays + "天"); } }
|
3. Tip
- 根据 switch 中的值,依次匹配各个 case 中的常量。匹配成功后,则进入相应 case 中。当调用完执行语句以后,则仍然继续向下执行其他 case 结构中的执行语句,直到遇到 break 关键字或此 switch-case 结构末尾结束为止。
- break 在 switch-case 结构中,表示遇到此关键字后,就跳出 switch-case 结构
- switch 结构中的表达式,只能是如下的 6 种数据类型之一:
byte 、short、char、int、枚举类型(JDK5.0 新增)、String 类型(JDK7.0 新增)
- case 后面只能放常量,不能放范围。(case age > 18:)
- break 关键字是可选的。
- default:相当于 if-else 结构中的 else。default 结构是可选的,而且位置是灵活的。
- 凡是可以使用 switch-case 的结构,都可以用 if-else。反之,不成立。
- 我们写分支结构时,当发现既可以使用 switch-case,(而且,switch 中表达式的取值情况不太多),
又可以使用 if-else 时,我们优先用 switch-case。原因:switch-case 执行效率稍高。
3. 循环结构(for 循环)
1. 结构
1 2 3 4 5 6 7 8 9 10
| ① 初始化条件 ② 循环条件 --->是boolean类型 ③ 循环体 ④ 迭代条件
for(①;②;④){ ③ }
执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
|
2.java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class ForTest { public static void main(String[] args) { for (int i = 0; i < 5; i++){ System.out.println(i + " hello world"); }
int num = 1; for(System.out.print('a'); num <= 3; System.out.print('c'), num++){ System.out.print('b'); }
System.out.println();
int sum = 0; int count = 0; for (int i = 1; i <= 100; i++) { if(i % 2 == 0){ sum += i; count++; } } System.out.println("总和为:" + sum); System.out.println("个数为:" + count); } }
|
4. 循环结构(while 循环)
1. 结构
1 2 3 4 5 6 7 8 9 10 11
| ① 初始化条件 ② 循环条件 --->是boolean类型 ③ 循环体 ④ 迭代条件
① while(②){ ③; ④; } 执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
|
2. java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class WhileTest { public static void main(String[] args) { int i = 2; while (i <= 100){ if(i % 2 == 0){ System.out.println(i);
} i++; } System.out.println(i); } }
|
3.Tip
- 写 while 循环记得要写迭代条件。一旦丢了,就可能导致死循环,我们要避免出现死循环。
- for 循环和 while 循环是可以相互转换的!
区别:for 循环和 while 循环的初始化条件部分的作用范围不同。
5. 循环结构(do while 循环)
1. 结构
1 2 3 4 5 6 7 8 9 10 11 12 13
| ① 初始化条件 ② 循环条件 --->是boolean类型 ③ 循环体 ④ 迭代条件
① do{ ③; ④;
}while(②);
执行过程:① - ③ - ④ - ② - ③ - ④ - ... - ②
|
2. java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class DoWhileTest { public static void main(String[] args) { int num = 1; int sum = 0; int count = 0; do { if(num % 2 == 0){ System.out.println(num); sum += num; count++; } num++; }while (num <= 100); System.out.println("总和为:" + sum); System.out.println("个数为:" + count);
int number1 = 10; while (number1 >10){ System.out.println("while"); number1--; }
int number2 = 10; do { System.out.println("do_while"); number2--; }while (number2 > 10); } }
|
3. Tip
- do-while 循环至少会执行一次循环体!
- 开发中,使用 for 和 while 更多一些。较少使用 do-while
6. 最简单“无限” 循环格式
while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,
需要根据循环体内部某些条件,来控制循环的结束。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
import java.util.Scanner;
public class ForWhileTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
int positiveNumber = 0; int negativeNumber = 0;
while (true){ int number = scanner.nextInt();
if(number > 0){ positiveNumber++; }else if(number < 0){ negativeNumber++; }else { break; } } System.out.println("正数: " + positiveNumber); System.out.println("负数:" + negativeNumber); } }
|
结束方法
- 循环条件部分返回 false
- 在循环体中,执行 break