Java_流程控制
Java_流程控制
分支结构
if
根据判定的结果(真或假)决定执行某个分支的代码
if() { doSomething1(); } if() { doSomething1(); }else { doSomething2(); } if() { doSomething1(); }else if() { doSomething2(); }...{ doSomething3(); }else { doSomething4(); }
执行流程:
- 先判断条件1的值,如果为true则执行语句体1,分支结束;如果为false则判断条件2的值
- 如果值为true就执行语句体2,分支结束;如果为false则判断条件3的值
- ...
- 如果没有任何条件为true,就执行else分支的语句体n+1。
switch
也是匹配条件去执行分支, 适合做值匹配的分支选择,结构清晰,格式良好。
switch() { case 1: doSomething1(); break; case 2: doSomething2(); break; case 3: doSomething3(); break; default: doSomething4(); }
执行流程:
- 先执行表达式的值,拿着这个值去与case后的值进行匹配。
- 匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。
- 如果case后的值都不匹配则执行default代码。
switch分支注意事项:
- 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
- case给出的值不允许重复,且只能是字面量,不能是变量。
- 不要忘记写break,否则会出现穿透现象。
switch的穿透性
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),
直到遇到break才跳出分支,这就是switch的穿透性。
switch穿透性案例(月份天数查看器)
需求:用户输入月份可以展示该月份的天数。
- 1、3 、5、 7 、 8、 10、 12月份是 31天
- 2月份是闰年为29天、非闰年为28天。
- 4 、6 、9、 11月份 是30天
public static void showMonth() { Scanner in = new Scanner(System.in); int month = 0; System.out.print("请输入月份:"); if (in.hasNextInt()) { month = in.nextInt(); } switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println("大月31天"); break; case 4: case 6: case 9: case 11: System.out.println("小月30天"); break; case 2: int year = new Date().getYear(); int day = year % 4 == 0 && year % 100 > 0 || year % 400 == 0 ? 29 : 28; System.out.println(day == 29 ? "闰年,29天" : "非闰年,28天"); break; default: System.out.println("月份错误,请输入1——12之间的数字!");; } }
循环结构
三种循环的区别
- for循环 和 while循环(先判断后执行)
- do...while (第一次先执行后判断)
for 和 while 的区别:
- for循环和while循环的执行流程是一模一样的。
- 如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
- for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。
死循环:一直循环的执行下去,如果没有干预不会停止下来。
for(;;) { System.out.println("Hello World"); } // 经典做法 while(true) { System.out.println("Hello World"); } do { System.out.println("Hello World"); } while (true);
Random随机数技术
- 作用:用于在程序中获取随机数的技术。
使用步骤:
- 导包:告诉程序去JDK的哪个包中找随机数技术
- 写一行代码代表得到随机数对象
- 调用随机数的功能获取0-9的随机数
package com.itheima.random; import java.util.Random; public class Test { public static void main(String[] args) { Random r = new Random(); int number = r.nextInt(10); System.out.println(“随机生成了:” + number); } }
- 注意:
- nextInt(n) 功能只能生成: 0 至 n-1之间的随机数,不包含n。
- Random随机数如何生成 65 – 91之间的随机数?
- 65 – 91 => (0 - 26)+ 65
int number = r.nextInt(27) + 65;
猜数字游戏
需求:
- 随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。
分析:
- 随机生成一个1-100之间的数据
- 使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。
public static void guessNum() { Scanner in = new Scanner(System.in); Random random = new Random(); int trueNum = random.nextInt(100) + 1; while(true) { System.out.print("请输入您猜测的数字:(1 - 100)"); int guessNum = in.nextInt(); if (guessNum == trueNum) { System.out.println("恭喜您答对了!"); break; }else if (guessNum > trueNum) { System.out.println("猜测偏大"); System.out.println("您猜错了,继续答题吧!"); }else { System.out.println("猜测偏小"); System.out.println("您猜错了,继续答题吧!"); } } }