chapter3:流程控制
1 顺序结构
略~
2 选择结构
2.1 if && if…else && else if
- 一个例子简单展示一下用法:
package 流程控制.if语句;
import java.util.Scanner;
// 根据分数给出等级
public class IfDemo01 {
public static void main(String[] args) {
int score;
System.out.print("请输入成绩:");
Scanner scanner = new Scanner(System.in);
score = scanner.nextInt();
if (score >= 0 && score <= 100) {
if (score > 90 && score <= 100) {
System.out.println("成绩评定合格,等级为A");
} else if (score > 80) {
System.out.println("成绩评定合格,等级为B");
} else if (score > 70) {
System.out.println("成绩评定合格,等级为C");
} else if (score > 60) {
System.out.println("成绩评定合格,等级为D");
} else {
System.out.println("成绩评定不合格!");
}
}
else {
System.out.println("成绩输入不合法,请输入0—100之间的整数!");
}
}
}
2.2 switch语句
- 一个完整的switch语句
switch(int 或 String 类型的字面值或变量){
case int 或 String 类型的字面值或变量;
java语句;
break;
case int 或 String 类型的字面值或变量;
java语句;
break;
case int 或 String 类型的字面值或变量;
java语句;
break;
case int 或 String 类型的字面值或变量;
java语句;
break;
……
default:
java语句;
……
}
- switch语句的执行原理
- switch后面的小括号中的数据和case后面的数据进行一一匹配,匹配成功的分支执行。
- 执行结束后如果该case下如果有break语句的话,执行break语句退出switch语句块;如果没有break语句则直接执行下一个case中的语句(不进行匹配),这种现象被称为switch语句的穿透现象【提供break语句可以避免穿透现象】。
- 当所有的分支都没有匹配成功时,如果有default分支,则会执行default分支当中的程序。
示例:
public class SwitchTest01 {
public static void main(String[] args){
int a = 2;
switch(a){
case 1:
System.out.println("a的值为1");
break;
case 2:
System.out.println("a的值为2");
// break; // 此时会出现穿透现象,直接执行case 3下的java语句
case 3:
System.out.println("a的值为3");
break;
case 4:
System.out.println("a的值为4");
break;
case 5:
System.out.println("a的值为5");
break;
// case可以合并
case 6:
case 7:
case 8:
case 9:
System.out.println("a的值大于5!");
break;
default:
System.out.println("没有匹配项!");
break;
}
}
}
执行结果:
a的值为2
a的值为3
Process finished with exit code 0
- 使用switch语句时的注意事项
- JDK6版本下,switch和case后边智能探测int类型
- JDK7包括7版本在内,引入新特性,switch和case后面可以探测 string 或者 int 类型的数据(其也包括byte,short,char类型,因为它们在执行时会自动转换类型为int)
- 多个case可以合并
public class SwitchTest02 {
public static void main(String[] args) {
/*
long a = 100l;
int b = a; // 编译报错,精度损失
long a = 100l;
switch(a){} // 编译报错,精度损失
*/
// 解决办法
long a = 100l;
switch((int)a){} // 强制类型转换
byte b = 127;
switch(b){}
// 注意switch在对其后的数据进行类型转换时会自动将原数据拷贝一份再进行类型转换,而不会因此改变原来的数据类型
char c = 'd';
switch((int)c){}
System.out.println("c的值为"+c);
}
}
运行结果:
3 循环结构
把需要重复执行的的代码放到一个循环体内从而提高代码的重用性
3.1 for循环
- for循环的结构
for(初始化表达式;布尔表达式;更新表达式){
// 需要重复执行的代码片段【循环体,由java语句构成】
}
- for循环的执行过程/原理
①初始化表达式最先执行,并且在整个for循环当中执行一次
②判断布尔表达式是true还是false(布尔表达式必须是true/false,不能是其他值),如果为真,执行循环体;如果为假,循环结束。
③执行更新表达式
④反复执行②③步 - 示例
// 用for循环打印九九乘法表
public class ForDemo01 {
public static void main(String[] args) {
for(int i=1; i<10; i++){ // 第几行
for(int j=1; j<=i; j++){ // 第几个式子
int result = i*j;
System.out.print(j+"*"+i+"="+result+" "); // print不换行
}
System.out.println(); // 相当于换行
}
}
}
3.2 while和do…while循环
举几个简单的例子,用法不再赘述:
- 输出1-100的所有奇数(while循环)
// 输出1-100的所有奇数
public class WhileDemo01 {
public static void main(String[] args) {
int num=1;
while(num<101){
if(num%2==1){
System.out.print(num+" ");
}
num++;
}
}
}
- 输出1-100的所有奇数(do…while循环)
public class DoWhileDemo03 {
public static void main(String[] args) {
int num = 1;
do {
if (num % 2 == 1) {
System.out.print(num + " ");
}
num++;
} while (num < 101);
}
}