Java基础语法:day03【flow control】

一、流程语句 

概述

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。

而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。

 顺序结构

public class Demo01Sequence {
	public static void main(String[] args) {
		System.out.println("今天天气不错");
		System.out.println("挺风和日丽的");
		System.out.println("我们下午没课");
		System.out.println("这的确挺爽的");
	}
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=53969:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo01Sequence
今天天气不错
挺风和日丽的
我们下午没课
这的确挺爽的

Process finished with exit code 0

二、判断语句

 1、判断语句1--if

1、语句格式

if(关系表达式){
   语句体;  
}

2、执行流程

  1. 首先判断关系表达式看其结果是 true还是false
  2. 如果是 true就执行语句体
  3. 如果是 false就不执行语句体

3、示例代码

// 单if语句
public class Demo02If {
	public static void main(String[] args) {
		System.out.println("今天天气不错,正在压马路……突然发现一个快乐的地方:网吧");
		int age = 19;
		if (age >= 18) {
			System.out.println("进入网吧,开始high!");
			System.out.println("遇到了一群猪队友,开始骂街。");
			System.out.println("感觉不爽,结账走人。");
		}
		System.out.println("回家吃饭");
	}
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54040:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo02If
今天天气不错,正在压马路……突然发现一个快乐的地方:网吧
进入网吧,开始high!
遇到了一群猪队友,开始骂街。
感觉不爽,结账走人。
回家吃饭

Process finished with exit code 0

2、 判断语句2--if...else

1、语句格式

if(关系表达式) {
   语句体1;  
}else {
   语句体2;  
}

2、执行流程

  1. 首先判断关系表达式看其结果是 true还是false
  2. 如果是 true就执行语句体1
  3. 如果是 false就执行语句体2

3、示例代码

package day03;

public class Demo03IfElse {
    public static void main(String[] args) {
        int num = 666;

        if (num % 2 == 0) { // 如果除以2能够余数为0,说明是偶数
            System.out.println("偶数");
        } else {
            System.out.println("奇数");
        }
    }
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54094:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo03IfElse
偶数

Process finished with exit code 0

 3、判断语句3--if..else if...else

1、语句格式

if (判断条件1) {
   执行语句1;  
} else if (判断条件2) {
   执行语句2;  
}
...
}else if (判断条件n) {
  执行语句n;   
} else {
   执行语句n+1;  
}

2、执行流程

  1. 首先判断关系表达式 1看其结果是true还是false
  2. 如果是 true就执行语句体1
  3. 如果是 false就继续判断关系表达式2看其结果是true还是false
  4. 如果是 true就执行语句体2
  5. 如果是 false就继续判断关系表达式…看其结果是true还是false
  6. 如果没有任何关系表达式为 true,就执行语句体n+1。

3、示例代码

// x和y的关系满足如下:
// 如果x >= 3,那么y = 2x + 1;
// 如果-1 < x < 3,那么y = 2x;
// 如果x <= -1,那么y = 2x – 1;
public class Demo04IfElseExt {
	public static void main(String[] args) {
		int x = -10;
		int y;
		if (x >= 3) {
			y = 2 * x + 1;
		} else if (-1 < x && x < 3) {
			y = 2 * x;
		} else {
			y = 2 * x - 1;
		}
		System.out.println("结果是:" + y);
	}
} 

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54210:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo04IfElseExt
结果是:-21

Process finished with exit code 0

4、语句练习

1、需求:

指定考试成绩,判断学生等级
90-100 优秀
80-89 好
70-79 良
60-69 及格
60 以下 不及格

2、实现代码

public class Demo05IfElsePractise {
	public static void main(String[] args) {
		int score = 120;
		if (score >= 90 && score <= 100) {
			System.out.println("优秀");
		} else if (score >= 80 && score < 90) {
			System.out.println("好");
		} else if (score >= 70 && score < 80) {
			System.out.println("良");
		} else if (score >= 60 && score < 70) {
			System.out.println("及格");
		} else if (score >= 0 && score < 60) {
			System.out.println("不及格");
		} else { // 单独处理边界之外的不合理情况
			System.out.println("数据错误");
		}
	}
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54256:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo05IfElsePractise
数据错误

Process finished with exit code 0

  int score = 99;

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54284:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo05IfElsePractise
优秀

Process finished with exit code 0

5、if 语句和三元运算符的互换

1、需求:

题目:使用三元运算符和标准的if-else语句分别实现:取两个数字当中的最大值

2、实现代码

public class Demo06Max {
	public static void main(String[] args) {
		int a = 105;
		int b = 20;
		
		// 首先使用三元运算符
		// int max = a > b ? a : b;
		
		// 使用今天的if语句
		int max;
		if (a > b) {
			max = a;
		} else {
			max = b;
		}
		
		System.out.println("最大值:" + max);
	}
}

运行结果

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54352:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo06Max
最大值:105

Process finished with exit code 0

三、选择语句

 1、选择语句--switch

1、语句格式

switch(表达式) {
  case 常量值1:
    语句体1;
    break;
  case 常量值2:
    语句体2;
    break;
  ...
  default:
    语句体n+1;
    break;
}

2、执行流程

  1. 首先计算出表达式的值
  2. 其次,和 case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
  3. 最后,如果所有的 case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

3、示例代码

public class Demo08SwitchNotice {
	public static void main(String[] args) {
		int num = 2;
		switch (num) {
			case 1:
				System.out.println("你好");
				break;
			case 2:
				System.out.println("我好");
				// break;
			case 3:
				System.out.println("大家好");
				break;
			default:
				System.out.println("他好,我也好。");
				break;
		} // switch
	}
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54463:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo08SwitchNotice
我好
大家好

Process finished with exit code 0

4、注意事项

1. 多个case后面的数值不可以重复。

2. switch后面小括号当中只能是下列数据类型:

  1. 基本数据类型:byte/short/char/int
  2. 引用数据类型:String字符串、enum枚举

3. switch语句格式可以很灵活:前后顺序可以颠倒,而且break语句还可以省略。“匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。”

2、 case 的穿透性

在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束

public static void main(String[] args) {
  int i = 5;
  switch (i){
    case 0:
      System.out.println("执行case0");
      break;
    case 5:
      System.out.println("执行case5");
    case 10:
      System.out.println("执行case10");
    default:
      System.out.println("执行default");
  }
}

上述程序中,执行case5后,由于没有break语句,程序会一直向后走,不会在判断case,也不会理会break,直接运行完整体switch。

由于case存在穿透性,因此初学者在编写switch语句时,必须要写上break。

第四章 循环语句

1、 循环语句1--for

循环结构的基本组成部分,一般可以分成四部分:

1. 初始化语句:在循环开始最初执行,而且只做唯一一次。
2. 条件判断:如果成立,则循环继续;如果不成立,则循环退出。
3. 循环体:重复要做的事情内容,若干行语句。
4. 步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次。

1、语句格式

for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③        
}

2、执行流程

执行顺序:①②③④ >②③④>②③④…②不满足为止。
①负责完成循环变量初始化
②负责判断是否满足循环条件,不满足则跳出循环
③具体执行的语句
④循环后,循环条件所涉及变量的变化情况

3、示例代码

public class Demo09For {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) {
			System.out.println("我错啦!原谅我吧!" + i);
		}
		System.out.println("程序停止");
	}
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=54743:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo09For
我错啦!原谅我吧!1
我错啦!原谅我吧!2
我错啦!原谅我吧!3
我错啦!原谅我吧!4
我错啦!原谅我吧!5
程序停止

Process finished with exit code 0

2、  循环语句2--while

1、语句格式

初始化表达式①
  while(布尔表达式②){
    循环体③
    步进表达式④
}

2、执行流程

执行顺序:①②③④ >②③④>②③④…②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句。
④循环后,循环变量的变化情况。

3、示例代码

public class Demo10While {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) {
			System.out.println("我错啦!" + i);
		}
		System.out.println("=================");
		
		int i = 1; // 1. 初始化语句
		while (i <= 5) { // 2. 条件判断
			System.out.println("我错啦!" + i); // 3. 循环体
			i++; // 4. 步进语句
		}
	}
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55015:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo10While
我错啦!1
我错啦!2
我错啦!3
我错啦!4
我错啦!5
=================
我错啦!1
我错啦!2
我错啦!3
我错啦!4
我错啦!5

Process finished with exit code 0

 3、 循环语句3--do...while1、语句格式

1、语句格式

初始化表达式①
    do{
    循环体③
    步进表达式④
}while(布尔表达式②);

2、执行流程

执行顺序:①③④ >②③④>②③④…②不满足为止。
①负责完成循环变量初始化。
②负责判断是否满足循环条件,不满足则跳出循环。
③具体执行的语句
④循环后,循环变量的变化情况

3、示例代码

package day03;

public class Demo11DoWhile {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("原谅你啦!起来吧!地上怪凉!" + i);
        }
        System.out.println("===============");

        int i = 1; // 1. 初始化语句
        do {
            System.out.println("原谅你啦!起来吧!地上怪凉!" + i); // 3. 循环体
            i++; // 4. 步进语句
        } while (i <= 3); // 2. 条件判断
    }
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55124:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo11DoWhile
原谅你啦!起来吧!地上怪凉!1
原谅你啦!起来吧!地上怪凉!2
原谅你啦!起来吧!地上怪凉!3
原谅你啦!起来吧!地上怪凉!4
原谅你啦!起来吧!地上怪凉!5
===============
原谅你啦!起来吧!地上怪凉!1
原谅你啦!起来吧!地上怪凉!2
原谅你啦!起来吧!地上怪凉!3

Process finished with exit code 0

语句练习

题目:求出1-100之间的偶数和。

思路:

1. 既然范围已经确定了是1到100之间,那么我就从1、2、3……一直到100这么多数字一个一个进行检查。
2. 总共有100个数字,并非所有数字都能用。必须要是偶数才能用,判断(if语句)偶数:num % 2 == 0
3. 需要一个变量,用来进行累加操作。也就好比是一个存钱罐。

实现代码

package day03;

public class Demo12HundredSum {
    public static void main(String[] args) {
        int sum = 0; // 用来累加的存钱罐

        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) { // 如果是偶数
                sum += i;
            }
        }
        System.out.println("结果是:" + sum);
    }
}

运行结果

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55210:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo12HundredSum
结果是:2550

Process finished with exit code 0

4、 循环语句的区别

1. 如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环会执行至少一次。

2. for循环的变量在小括号当中定义,只有循环内部才可以使用。while循环和do-while循环初始化语句本来就在外面,所以出来循环之后还可以继续使用。

示例代码

package day03;

public class Demo13LoopDifference {
    public static void main(String[] args) {
        for (int i = 1; i < 0; i++) {
            System.out.println("Hello");
        }
        // System.out.println(i); // 这一行是错误写法!因为变量i定义在for循环小括号内,只有for循环自己才能用。
        System.out.println("================");

        int i = 1;
        do {
            System.out.println("World");
            i++;
        } while (i < 0);
        // 现在已经超出了do-while循环的范围,我们仍然可以使用变量i
        System.out.println(i); // 2
    }
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55277:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo13LoopDifference
================
World
2

Process finished with exit code 0

5、跳出语句

break关键字的用法有常见的两种:

1. 可以用在switch语句当中,一旦执行,整个switch语句立刻结束。
2. 还可以用在循环语句当中,一旦执行,整个循环语句立刻结束。打断循环。

示例代码

package day03;

public class Demo14Break {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            // 如果希望从第4次开始,后续全都不要了,就要打断循环
            if (i == 4) { // 如果当前是第4次
                break; // 那么就打断整个循环
            }
            System.out.println("Hello" + i);
        }
    }
}

  输出

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55344:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo14Break
Hello1
Hello2
Hello3

Process finished with exit code 0

关于循环的选择,有一个小建议:凡是次数确定的场景多用for循环;否则多用while循环。

另一种循环控制语句是continue关键字。

一旦执行,立刻跳过当前次循环剩余内容,马上开始下一次循环。

示例代码

package day03;

public class Demo15Continue {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 4) { // 如果当前是第4层
                continue; // 那么跳过当前次循环,马上开始下一次(第5层)
            }
            System.out.println(i + "层到了。");
        }
    }
}

运行结果

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55344:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo14Break
Hello1
Hello2
Hello3

Process finished with exit code 0

五、扩展知识

 1、死循环

永远停不下来的循环,叫做死循环。

1、语句格式

死循环的标准格式:
while (true) {
	循环体
}

2、示例代码

package day03;

public class Demo16DeadLoop {
    public static void main(String[] args) {
        while (true) {
            System.out.println("I Love Java!");
        }

        // System.out.println("Hello");
    }
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=55737:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo15Continue

I Love Java!
I Love Java!
I Love Java!
...
无休止的下去

在后期的开发中,会出现使用死循环的场景,例如:我们需要读取用户输入的输入,但是用户输入多少数据我们并不清楚,也只能使用死循环,当用户不想输入数据了,
就可以结束循环了,如何去结束一个死循环呢,就需要使用到跳出语句了。

2、 嵌套循环

所谓嵌套循环 ,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数

1、语句格式

for(初始化表达式①; 循环条件②; 步进表达式⑦) {
    for(初始化表达式③; 循环条件④; 步进表达式⑥) {
       执行语句⑤;  
    }
} 

2、执行流程

执行顺序:①②③④⑤⑥ >④⑤⑥>⑦②③④⑤⑥>④⑤⑥
外循环一次,内循环多次。
比如跳绳:一共跳 5组,每组跳10个。5组就是外循环,10个就是内循环。

3、示例代码

public static void main(String[] args) {
    //5*8的矩形,打印5行*号,每行8个
    //外循环5次,内循环8次
    for(int i = 0; i < 5; i++){
        for(int j = 0; j < 8; j++){
            //不换行打印星号
            System.out.print("*");
        }
        //内循环打印8个星号后,需要一次换行
        System.out.println();
}

运行结果:

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\lib\idea_rt.jar=56980:C:\Program Files\JetBrains\IntelliJ IDEA 2019.2\bin" -Dfile.encoding=UTF-8 -classpath C:\java\JavaApps\out\production\JavaApps day03.Demo16DeadLoop
********
********
********
********
********

Process finished with exit code 0
posted @ 2020-03-31 07:54  活的潇洒80  阅读(348)  评论(0编辑  收藏  举报