java流程控制语句练习题_Java流程控制语句

接下来记录一下Java流程控制语句,包括条件语句(if-else)、选择语句(switch-case)和循环语句(while和for)。全文使用例子来记录,可以更好的理解上述流程控制语句。

流程控制语句

流程控制结构有顺序结构,分支结构和循环结构。

(1)顺序结构,代码从上到下从左到右执行

(2)分支结构,有if、if-else、if-else if,switch-case

(3)循环结构,有while,do-while和for

if

语法格式为:

if(逻辑判断){

代码块;

}

案例 判断一个数是奇数还是偶数,使用if可以完成。

1 importjava.util.Scanner;2 public classIfCase{3 public static voidmain(String[] args){4 //使用if判断一个数是奇数还是偶数

5 Scanner scan=newScanner(System.in);6 int inputNumber=scan.nextInt();7 if(inputNumber%2==0){8 System.out.println("这个数是偶数");9 }10 if(inputNumber%2==1){11 System.out.println("这个数是奇数");12 }13 }14 }

测试结果

04f7b9e0f043e78c3246a42e814536e8.png

if是最简单的逻辑判断,如果有多个条件则需要写多个if判断。

if-else

语法格式为:

if(逻辑判断){

代码块1;

}else{

代码块2;

}

如果逻辑判断为true,则执行代码块1,否则执行代码块2。

案例:输入三个整数,得到三个数中的最大值。

1 importjava.util.Scanner;2 public classIfCase1{3 public static voidmain(String[] args){4 //使用if-else判断三个数中的最大数

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入三个整数");7 int a=scan.nextInt();8 int b=scan.nextInt();9 int c=scan.nextInt();10

11 //比较

12 if(a>=b){13 if(a>=c){14 System.out.println("最大是为"+a);15 }else{16 System.out.println("最大是为"+c);17 }18 }else{19 if(b>=c){20 System.out.println("最大是为"+b);21 }else{22 System.out.println("最大是为"+c);23 }24 }25 }26 }

测试结果

825d280c2519523996fab475d313d20d.png

if-else整体上让代码看上去有两条分支。

if-else if

语法格式为:

if(逻辑判断1){

代码块1;

}else if(逻辑判断2){

代码块2;

}

...

else{

最后代码块;

}

案例:根据分数大小定等级,如90→A,80→B,70→C等,这个如果用if-else来实现,会显得代码可阅读性很差,使用if-else if效果更好。

1importjava.util.Scanner;2 public classIfCase2{3 public static voidmain(String[] args){4 //使用if-else if来输出分数的等级

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入分数");7 int score=scan.nextInt();8

9 //给分数分级

10 if(score>100||score<0){11 System.out.println("非法的分数");12 }else if(score>=90){13 System.out.println("A");14 }else if(score>=80){15 System.out.println("B");16 }else if(score>=70){17 System.out.println("C");18 }else if(score>=60){19 System.out.println("D");20 }else{21 System.out.println("E");22 }23 }24 }

测试结果

fd3c654377132887e4aabce988f31f12.png

if-else if代码看起来更加的有层次感,可读性较好,另外如果if或者else中代码块只有一句话,大括号可以省略。

switch-case

语法格式为:

switch(选项){

case 选项1: 代码块1;break;

case 选项2: 代码块2;break;

case 选项3: 代码块3;break;

...

default: 代码块;break;

}

案例1:根据输入的数字1~7,输出对应的星期英文名。

1 importjava.util.Scanner;2 public classSwitchCase{3 public static voidmain(String[] args){4 //使用switch-case语句输出星期

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入数字1~7");7 int num=scan.nextInt();8

9 //先限定

10 if(num<1||num>7){11 System.out.println("不是范围内数字");12 return;13 }14

15 switch(num){16 case 1:17 System.out.println("Monday");18 break;19

20 case 2:21 System.out.println("Tuesday");22 break;23

24 case 3:25 System.out.println("Wednesday");26 break;27

28 case 4:29 System.out.println("Thursday");30 break;31

32 case 5:33 System.out.println("Friday");34 break;35

36 case 6:37 System.out.println("Saturday");38 break;39 //case 7 最后一个写成default也可以,前面加个限定就行

40 default:41 System.out.println("Sunday");42 break;43 }44 }45 }

测试结果

018107e0b9e3d2884376c5c3cd9c2352.png

switch-case中,switch中的选项只能是byte,short,char和int,在JDK1.7之后可以使用String。另外break的位置对执行结果也有影响,case后的条件满足,就寻找到了程序入口,代码块什么时候停由后面的break决定,或者执行到最后停止,具体参考如下案例。

案例2:输入月份,判断这个月有多少天。

1 importjava.util.Scanner;2 public classMonthDay{3 public static voidmain(String[] args){4 //灵活使用break的位置

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入月份");7 int month=scan.nextInt();8 //只考虑break的用法暂时不考虑是否严谨

9 switch(month){10 case 1:11 case 3:12 case 5:13 case 7:14 case 8:15 case 10:16 case 12:17 System.out.println("这个月有31天");18 break;19

20 case 4:21 case 6:22 case 9:23 case 11:24 System.out.println("这个月有30天");25 break;26

27 //暂时按照28天来处理

28 case 2:29 System.out.println("这个月有28天");30

31 default:32 System.out.println("输入月份不合法");33 }34 }35 }

测试结果

e70fa4f3b7f57c2a3a2a76d503b61661.png

案例3:根据输入的年月日,计算这天在这一年中是第多少天。

1 importjava.util.Scanner;2 public classDayCalculate{3 public static voidmain(String[] args){4 //计算这天是第多少天

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入年");7 int year=scan.nextInt();8 System.out.println("请输入月");9 int month=scan.nextInt();10 System.out.println("请输入日");11 int day=scan.nextInt();12

13 //临时变量

14 int sum=0;15

16 //年的作用是为了判断2月有多少天,日的作用是判断当月的天数,月的作用是判断前几个月一共有多少天

17 switch(month){18 //进入多少月份,先计算这个月前面月份的总天数

19 case 12:sum+=30;20 case 11:sum+=31;21 case 10:sum+=30;22 case 9:sum+=31;23 case 8:sum+=31;24 case 7:sum+=30;25 case 6:sum+=31;26 case 5:sum+=30;27 case 4:sum+=31;28 //3月进入,需要看2月的天数,需要判断闰年和平年

29 case 3:30 if(year%400==0||(year%4==0&&year%100!=0)){31 sum+=29;32 }else{33 sum+=28;34 }35 case 2:sum+=31;36 case 1:sum+=0;37 //break可以不用加

38 break;39 }40 //输出

41 System.out.println("这是"+year+"年的第"+(sum+day)+"天");42 }43 }

测试结果

647e19bcf618fc72d796c77ba3a13ebb.png

while

语法格式为:

while(逻辑值){

代码块;

新的逻辑值;

}

逻辑值为true,才能执行代码块,然后更新逻辑值再次判断是否为true,如此反复循环,适用于不知道次数的循环案例。

案例1:输入5个数,得到其中最大的值。

1 importjava.util.Scanner;2 public classGetMaxNumber{3 public static voidmain(String[] args){4 //使用while循环

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入5个数");7 int max=scan.nextInt();8 int count=0;9 while(count<4){10 int num=scan.nextInt();11 if(max

17 System.out.println("最大的值是"+max);18 }19 }

测试结果

f041cc8ece0f73c76f0dfc4cc59b7fe3.png

案例2:输入一个整数,判断它是一个几位数,如输入98999,得到5位数的结果。

1 importjava.util.Scanner;2 public classGetBitNumber{3 public static voidmain(String[] args){4 //判断一个数有多少位

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入一个整数");7 int num=scan.nextInt();8 int bitNum=0;//位数9 //int

10 while(true){11 num=num/10;12 if(num>0){13 bitNum++;14 }15 if(num==0){16 bitNum++;17 break;18 }19 }20 System.out.println("这个数位数为"+bitNum);21 }22 }

测试结果

07c6dd973882cea8cc4b5521bf135691.png

案例3:输入一个整数,打印这个数的所有因数,如输入8,需打印出1,2,4,8。

1 importjava.util.Scanner;2 public classGetFactor{3 public static voidmain(String[] args){4 //判断一个数的所有公约数

5 Scanner scan=newScanner(System.in);6 System.out.println("请输入一个整数");7 int num=scan.nextInt();8 int index=1;9 while(index<=num){10 if(num%index==0){11 System.out.print(index+" ");12 }13 index++;14 }15 System.out.println();16 }17 }

测试结果

81651f45e640ce0e082b049f4b959601.png

while循环使用比较多,还有一个do-while循环,这个用的比较少,就先不说明了,反正是不管while中逻辑判断是否满足,都至少需要执行完一次do中的代码块。

for

语法格式为:

for(循环变量定义:控制条件:循环变量变化){

代码块;

}

接下来使用打印星星来理解for循环。

案例1:打印一个星星图案,要是直角三角形的,再倒过来打印。

案例2:打印一个星星图案,要是菱形。

1 public classDrawTriangle{2 public static voidmain(String[] args){3 //1 打印一个直角三角形,左边直角

4 for(int i=1;i<=8;i++){5 for(int j=1;j<=i;j++){6 System.out.print("*");7 }8 System.out.println();9 }10

11 System.out.println();12

13 //2 将上面三角形倒过来

14 for(int i=8;i>=1;i--){15 for(int j=i;j>=1;j--){16 System.out.print("*");17 }18 System.out.println();19 }20

21 System.out.println();22

23 //3 打印一个直角三角形,右边直角

24 for(int i=1;i<=8;i++){25 //打印空格的次数

26 for(int j=1;j<=8-i;j++){27 System.out.print(" ");28 }29 //打印星星的次数

30 for(int j=1;j<=i;j++){31 System.out.print("*");32 }33 System.out.println();34 }35

36 System.out.println();37

38 //4 将上面三角形倒过来

39 for(int i=8;i>=1;i--){40 //打印空格的次数

41 for(int j=1;j<=8-i;j++){42 System.out.print(" ");43 }44 //打印星星的次数

45 for(int j=1;j<=i;j++){46 System.out.print("*");47 }48 System.out.println();49 }50

51 //打印一个等腰三角

52 for(int i=1;i<=8;i++){53 //打印空格的次数

54 for(int j=1;j<=8-i;j++){55 System.out.print(" ");56 }57 //打印星星的次数

58 for(int j=1;j<=i;j++){59 System.out.print("*"+" ");60 }61 System.out.println();62 }63

64 //5 打印一个等腰三角形,但是这个星星数是按照1 3 5 7 9增加,如下图所示

65 /*

66 *67 * * *68 * * * * *69 * * *70 *71 */

72 //上面四个例子其实已经给了提示,可以组合起来就是一个菱形

73 for(int i=1;i<=8;i++){74 //打印左边75 //打印空格的次数

76 for(int j=1;j<=8-i;j++){77 System.out.print(" ");78 }79 //打印星星的次数

80 for(int j=1;j<=i;j++){81 System.out.print("*");82 }83 //打印右边,只打印出星星,空格可以不用管

84 for(int j=1;j<=i-1;j++){85 //i-1:最左边的星星不需要打印

86 System.out.print("*");87 }88

89 System.out.println();90 }91 //将上面三角形倒过来

92 for(int i=8;i>=1;i--){93 //打印左边94 //打印空格的次数

95 for(int j=1;j<=8-i;j++){96 System.out.print(" ");97 }98 //打印星星的次数

99 for(int j=1;j<=i;j++){100 System.out.print("*");101 }102 //打印右边,空格的数目不需要管

103 for(int j=1;j<=i-1;j++){104 //i-1:最左边的星星不打印

105 System.out.print("*");106 }107 System.out.println();108 }109 }110 }

测试结果

e03ef5c354235b58ea9154193475b5aa.png

1f50eecb53a304b73cf45c2f1a84bd73.pngbreak&continue关键字

break关键字用于switch-case和循环语句,用于终止当前层的循环,外层循环不受影响。

continue关键字也用于switch-case和循环语句,用于终止当前的循环逻辑,当前循环后面的代码不再执行,继续进行下一次循环。

案例1:break关键字使用

1 public classBreakDemo{2 public static voidmain(String[] args){3 //测试break

4 for(int i=0;i<9;i++){5 System.out.println(i);6 if(i%2==1){7 break;8 }9 }10 //两层循环测试,只结束内存循环

11 for(int i=0;i<9;i++){12 for(int j=0;j<9;j++){13 if(j%2==1){14 break;15 }16 System.out.println(i+"|"+j);17 }18 }19 }20 }

测试结果

fe17521d3d29d48297e2bc8a4aab03b9.png

可以看出break后,break所属层的代码都不再继续执行。

案例2:continue关键字使用

1 public classContinueDemo{2 public static voidmain(String[] args){3 //测试continue

4 for(int i=0;i<9;i++){5 if(i%2==1){6 continue;7 }8 System.out.println(i);9 }10 //两层循环测试,只影响continue所在的循环

11 for(int i=0;i<9;i++){12 for(int j=0;j<9;j++){13 if(j%2==1){14 continue;15 }16 //如果是奇数,后面不再打印

17 System.out.println(i+"|"+j);18 }19 }20 }21 }

测试结果

15b0fb473655f89d4cedf468d27447f3.png

可以看出,continue关键字使用后,当前循环逻辑终止,但是不影响下一个循环逻辑的继续执行,因此继续输出后面的偶数。

经典练习

(1)百钱百鸡,即用100文钱买100只鸡,具体参考代码解释

1 public classMoneyAndChick{2 public static voidmain(String[] args){3 //百钱白鸡

4 /**

5 3文钱-1只公鸡6 2文钱-1只母鸡7 1文钱-3只小鸡8 */

9 int numberCock;//公鸡数目

10 int numberBiddy;//母鸡数目

11 for(numberCock=0;numberCock<=33;numberCock++){12 for(numberBiddy=0;numberBiddy<=50;numberBiddy++){13 //小鸡一定是3的倍数

14 if((100-numberCock-numberBiddy)%3==0){15 int price=numberCock*3+numberBiddy*2+(100-numberCock-numberBiddy)/3;16 //System.out.println("开始判断");

17 if(price==100){18 System.out.println("公鸡数"+numberCock);19 System.out.println("母鸡数"+numberBiddy);20 System.out.println("小鸡数"+(100-numberCock-numberBiddy));21 System.out.println("---------------------分割线---------------------");22 }23 }24 }25 }26 }27 }

(2)判断一个数是否为质数,这个代码有优化,以前是没考虑到一个数一半以后的数不需要考虑。

1 importjava.util.Scanner;2 public classPrimeNumber{3 public static voidmain(String[] args){4 //判断是否为质数

5 System.out.println("请输入数字");6 Scanner scan=newScanner(System.in);7 int number=scan.nextInt();8 //质数只能被1和本身整除,并且只需要比较2~number/2的即可,后面的数除了肯定是一点几的数,无需考虑

9 boolean flag=true;10 for(int i=2;i<=number/2;i++){11 if(number%i==0){12 flag=false;13 break;14 }15 }16 if(flag){17 System.out.println(number+"是质数");18 }else{19 System.out.println(number+"不是质数");20 }21 }22 }

(3)求一个数所有的质因数

1 importjava.util.Scanner;2 public classPrimeFactor{3 public static voidmain(String[] args){4 //求出一个数所有的质因数

5 /**

6 质因数:因数全为质数7 */

8 System.out.println("请输入一个数");9 Scanner scan=newScanner(System.in);10 int number=scan.nextInt();11 for(int factor=2; number!=1; ){12 if(number%factor==0){13 System.out.println(factor);14 number/=factor;15 }else{16 factor++;17 }18 }19 }20 }

(4)使用一个for循环完成九九乘法表

1 public classNinePlusNine{2 public static voidmain(String[] args){3 //两个for循环打印9*9循环表

4 System.out.println("两个for循环打印9*9循环表");5 for(int i=1;i<=9;i++){6 for(int j=1;j<=i;j++){7 System.out.print(j+"*"+i+"="+i*j+" ");8 }9 System.out.println();10 }11 //一个for循环打印9*9循环表

12 System.out.println("一个for循环打印9*9循环表");13 for(int i=1,j=1;i<=9;j++){14 System.out.print(j+"*"+i+"="+i*j+" ");15 if(i==j){16 i++;17 j=0;18 //换行

19 System.out.println();20 }21 }22 //一个for循环打印9*9循环表,换一种写法

23 System.out.println("一个for循环打印9*9循环表");24 for(int i=1,j=1;i<=9; ){25 System.out.print(j+"*"+i+"="+i*j+" ");26 if(i==j){27 i++;28 j=0;29 //换行

30 System.out.println();31 }32 //j自增

33 j++;34 }35 }36 }

结论

流程控制语句是程序基本语句,复习用。

参考博客:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值