Java_流程控制

Java_流程控制

分支结构

if

  • 根据判定的结果(真或假)决定执行某个分支的代码

    if() {
    	doSomething1();
    }
    if() {
    	doSomething1();
    }else {
    	doSomething2();
    }
    if() {
    	doSomething1();
    }else if() {
    	doSomething2();
    }...{
    	doSomething3();
    }else {
    	doSomething4();
    }
    
  • 执行流程:

    1. 先判断条件1的值,如果为true则执行语句体1,分支结束;如果为false则判断条件2的值
    2. 如果值为true就执行语句体2,分支结束;如果为false则判断条件3的值
    3. 如果没有任何条件为true,就执行else分支的语句体n+1。

switch

  • 也是匹配条件去执行分支, 适合做值匹配的分支选择,结构清晰,格式良好。

    switch() {
        case 1:
            doSomething1();
            break;
        case 2:
            doSomething2();
            break;
        case 3:
            doSomething3();
            break;
        default:
            doSomething4();
    }
    
  • 执行流程:

    1. 先执行表达式的值,拿着这个值去与case后的值进行匹配。
    2. 匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支。
    3. 如果case后的值都不匹配则执行default代码。
  • switch分支注意事项:

    1. 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
    2. case给出的值不允许重复,且只能是字面量,不能是变量。
    3. 不要忘记写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随机数技术

    • 作用:用于在程序中获取随机数的技术。
  • 使用步骤:

    1. 导包:告诉程序去JDK的哪个包中找随机数技术
    2. 写一行代码代表得到随机数对象
    3. 调用随机数的功能获取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之间的随机数?
      1. 65 – 91 => (0 - 26)+ 65
      2. int number = r.nextInt(27) + 65;

猜数字游戏

  • 需求:

    • 随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。
  • 分析:

    1. 随机生成一个1-100之间的数据
    2. 使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。
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("您猜错了,继续答题吧!");
            }
    }
}

你可能感兴趣的:(java)