程序流程控制
1.顺序结构
程序从上至下逐行执行,无判断与跳转
public class Test1{ public static void main(String[] args){ int i = 1; int j = i + 1; System.out.println(j); } }
2.分支结构
依据条件,选择性执行某段语句
主要有以下两种
2.1 if…else语句
单判断
public class Test2{ public static void main(String[] args){ int age = 26; if(age >= 18){ System.out.println("你已经成年了!"); }else{ System.out.println("你还是未成年!"); } } }
多判断
public class Test3{ public static void main(String[] args){ int age = 26; if(age <18){ System.out.println("你还是未成年!"); }else if(age > 45){ System.out.println("你是中老年人!"); }else{ System.out.println("你是青年人!"); } } }
优化:添加键盘输入
//1.导包 import java.util.Scanner; public class Test4{ public static void main(String[] args){ //2.创建Scanner类的对象 Scanner s = new Scanner(System.in); System.out.println("请输入你的年龄: "); //3.调用此对象的方法next(字符串),nextInt(整型) int age = s.nextInt(); if(age < 18){ System.out.println("你还是未成年!"); }else if(age > 45){ System.out.println("你是中老年人!"); }else{ System.out.println("你是青年人!"); } } }
if…else分支结构测试
题目一
import java.util.Scanner; public class Test5{ public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.println("请输入你的成绩: "); int score = s.nextInt(); if(score == 100){ System.out.println("BMW车,你拿走!"); }else if(80 < score && score <= 99){ System.out.println("Iphone13,你拿走!"); }else if(60 <= score && score <= 80){ System.out.println("参考书,你拿走!"); }else{ System.out.println("什么都没有了!"); } } }
题目二
方法一:
import java.util.Scanner; public class Test { public static void main(String[] args) { // 键盘输入三个数 Scanner s = new Scanner(System.in); System.out.println("第一个数: "); int num1 = s.nextInt(); System.out.println("第二个数: "); int num2 = s.nextInt(); System.out.println("第三个数: "); int num3 = s.nextInt(); if(num1 > num2){ if(num3 > num1) System.out.println("三个数从小到大排列:" + num2 +"," + num1 + "," + num3); else if(num3 < num2){ System.out.println("三个数从小到大排列:" + num3 +"," + num2 + "," + num1); }else System.out.println("三个数从小到大排列:" + num2 +"," + num3 + "," + num1); }else{ if(num3 > num2){ System.out.println("三个数从小到大排列:" + num1 +"," + num2 + "," + num3); } else if(num3 < num1){ System.out.println("三个数从小到大排列:" + num3 +"," + num1 + "," + num2); }else{ System.out.println("三个数从小到大排列:" + num1 +"," + num3 + "," + num2); } } } }
方法二:
import java.util.Scanner; public class Test{ public static void main(String[] args){ //1.键盘输入三个数 Scanner s = new Scanner(System.in); System.out.println("第一个数: "); int num1 = s.nextInt(); System.out.println("第二个数: "); int num2 = s.nextInt(); System.out.println("第三个数: "); int num3 = s.nextInt(); //2.判断第一个与第二个数的大小,让num2 > num1(如果num1>num2,值互换;反之就不变) if(num1 > num2){ num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2; } //3.判断第三个数的大小(第二大,最小,最大) if(num2 >num3 && num3 > num1){ num2 = num2 ^ num3; num3 = num2 ^ num3; num2 = num2 ^ num3; System.out.println("三个数从小到大排列:" + num1 +"," + num2 + "," + num3); }else if(num2 >num3 && num3 < num1){ System.out.println("三个数从小到大排列:" + num3 +"," + num1 + "," + num2); }else{ System.out.println("三个数从小到大排列:" + num1 +"," + num2 + "," + num3); } } }
注意
- 条件判断之间可以嵌套
如果多个条件语句是互斥
关系,多个条件语句上下顺序自由
;
如果多个条件语句是包含
关系,要求条件语句范围小
的要写在
范围大的上面
。 - 如果if中的执行语句只有一行,可以省略
{}
,建议不要省略。
2.2 switch语句
- switch语句会根据表达式对应case去判断,满足就执行,每条case语句一定要加break,否则程序会继续执行下去
- case 常量:常量只能是值,不能是取值范围
- default:可选,位置灵活
- 常量可取char,byte,short,int,String(jdk1.7),枚举
switch分支结构测试
题目一
根据输入的月份,判断当前季节?
import java.util.Scanner; // 3,4,5,月为春天,6,7,8,月为夏天,9,10,11月为秋天,12,1,2月为冬天 public class Test { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入月份: "); int age = s.nextInt(); switch(age/3){ case 1: System.out.println(age + "月是春天"); break; case 2: System.out.println(age + "月是夏天"); break; case 3: System.out.println(age + "月是秋天"); break; default: System.out.println(age + "月是冬天"); break; } }
题目二
根据键盘输入的月份与日期,判断是2023年的第多少天?
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入月份: "); int month = s.nextInt(); System.out.println("请输入日期: "); int day = s.nextInt(); int sum = 0; switch(month){ default: System.out.println("输入错误"); case 12: sum += 30; //+11月 case 11: sum += 31; //+10月 case 10: sum += 30; //+9月 case 9: sum += 31; //+8月 case 8: sum += 31; //+7月 case 7: sum += 30; //+6月 case 6: sum += 31; //+5月 case 5: sum += 30; //+4月 case 4: sum += 31; //+3月 case 3: sum += 28; //+2月 case 2: sum += 31; //+1月 case 1: sum += day; } System.out.println(month + "月" + day + "日" + "是2023年的第" + sum + "天"); } }
课外题
3.循环结构
依据条件,重复性执行某段语句
组成部分:初始化部分,循环条件部分,循环体部分,迭代部分
主要有以下三种
3.1 while语句
输出100以内的所以偶数及所有偶数的和
方法一:
public class Test { public static void main(String[] args) { int sum = 0; int i = 0; while(i <= 100){ sum += i; System.out.println(i); i += 2; } System.out.println(sum); }
方法二:
public class Test { public static void main(String[] args) { int sum = 0; int i = 0; while(i <= 100){ if(i % 2 == 0){ sum += i; System.out.println(i); } i++; } System.out.println(sum); } }
3.2 do…while语句
格式
初始化; do{ 循环体; 迭代条件; }while(循环条件)
输出100以内的所以偶数及所有偶数的和
方法一:
public class Test2 { public static void main(String[] args) { int sum = 0; int i = 0; do{ System.out.println(i); sum += i; i += 2; }while(i <= 100); System.out.println(sum); }
方法二:
public class Test1 { public static void main(String[] args) { int sum = 0; int i = 0; do{ if(i % 2 == 0){ sum += i; System.out.println(i); } i++; }while(i <= 100); System.out.println(sum); } }
while语句与do-while的区别:
do-while至少执行一次