欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java语言基础语法之流程控制语句

程序员文章站 2023-11-29 17:52:46
Java语言基础(四)四、流程控制语句(顺序/分支/循环)4.1 分支结构的概念4.2 if分支结构4.3 if else分支结构4.4 if else if else4.5 案例:个人所得税计算4.6 switch case分支结构4.7 循环结构的概念4.8 for循环4.9 for循环打印奇数4.10 continue4.11 break4.12 break 跳出多层循环4.13 for循环实现猜数字游戏4.14 双重for循环4.15 双重循环实现素数打印(除到平方根)4.16 while循环4.1...

四、流程控制语句(顺序/分支/循环)

4.1 分支结构的概念

  • 当需要进行条件判断并作出选择时,使用分支结构

4.2 if分支结构

	if(条件表达式) {
		语句块;
	}

4.3 if else分支结构

	if(条件表达式) {
		语句块;
	} else {
		语句块2;
	}

4.4 if else if else

	if(条件表达式) {
		语句块1;
	} else if(条件表达式) {
		语句块2;
	} else {
		语句块3
	}

4.5 案例:个人所得税计算

  • 根据用户输入的薪水计算个人所得税并打印出来,其中个税起征点为:5000元,具体规则如下
    Java语言基础语法之流程控制语句
  • 个人所得税公式: 本月应纳税所得额 * 对应的税率 - 速算扣除数
    • 比如工资是13000,那么超过5000的部分(全月应纳税所得额)为8000,其对应的税率是10%,速算扣除数为210元
    • 因此,个人所得税 = 8000 * 10% - 210 = 590(元)

4.6 switch case分支结构

  • 注:switch()中支持的数据类型有 byteshortchar以及int类型,从jdk1.5开始支持枚举类型,从jdk1.7开始支持String类型

      swith(变量/表达式) {
      	case 字面值1:
      		语句块1;
      		break;
      	case 字面值2: 
      		语句块1;
      		break;
      	...
      	default:
      		语句块n;
      }
    
  • 没有break就会发生case穿透(即代码一直执行,知道遇到break才跳出switch case语句)

  • default 也可以放在最开始,但是要加上break,否则也会发生case穿透

// 使用switch case分支结构实现考试成绩的等级判断
int score = 66;
switch(score / 10) {
	case 10: System.out.println("等级A"); break; // 如果没有break,会发生case穿透
	case 9:  System.out.println("等级A"); break; 
	case 8:  System.out.println("等级B"); break;
	case 7:  System.out.println("等级C"); break;
	case 6:  System.out.println("等级D"); break;
	default: System.out.println("等级E"); //最后一项没有break
}

4.7 循环结构的概念

  • 在Java程序中若希望重复执行一段代码时,就需要使用循环结构
  • 任何复杂的程序逻辑都可以通过顺序、分支、循环三种程序结构实现

4.8 for循环

	for(初始化表达式; 条件表达式; 修改初始值表达式) {
		循环体;
	}
for(int i = 1; i <= 10; i++) { // i = i + 1  => i += 1  => i++
	System.out.println("今晚吃鸡,大吉大利,正在进行第" + i + "场游戏...");
	Thread.sleep(5000); // 表示模拟睡眠5秒的效果
	System.out.println("本场游戏结束!\n\n\n");
}		
System.out.println("该休息了,否则明天早上就要迟到了!");

4.9 for循环打印奇数

// 使用for循环打印1 ~ 100之间的所有奇数
// 方式一:根据奇数的概念进行打印
for(int i = 1; i <= 100; i++) {
	// 若当前i的数值是奇数时则打印,否则不打印   奇数就是不能被2整除的数,也就是对2取余的结果不为0
	if(i % 2 != 0) {
	System.out.println("i = " + i);
	}
}
	
// 方式二:根据等差数列的概念来打印  每两个数据之间相差2
for(int i = 1; i <= 100; i += 2) {
	System.out.println("i = " + i);
}
	
// 方式三:根据通项公式的规则来打印  2*i-1
for(int i = 1; i <= 50; i++) {
	System.out.println("i = " + (2 * i - 1));
}

4.10 continue

  • continue语句用在循环体中,用于提前结束本次循环二开始下一次循环

4.11 break

  • break用于退出当前语句块,break用在循环体中用于退出循环
  • for( ; ; ) - 这种没有循环条件的循环叫做 无限循环,俗称“死循环
  • break可以配合无限循环使用
// 声明一个boolean类型的变量作为发送方的标志
boolean flag = true;
		
// 使用无限循环来模拟不断地聊天
for(;;) {
	// 1.提示用户输入要发送的聊天内容并使用变量记录
	System.out.println("请" + (flag? "张三": "李四") +"输入要发送的聊天内容:");
	Scanner sc = new Scanner(System.in);
	String str = sc.next();
			
	// 2.判断用户输入的内容是否为"bye",若是则聊天结束
	if("bye".equals(str)) {
		System.out.println("聊天结束!");
		break; // 用于跳出当前循环
	}
	// 3.若不是"bye"则打印用户输入的聊天内容
	System.out.println((flag? "张三说:": "李四说:") + str + "\n\n\n");
	flag = !flag;
	}

4.12 break 跳出多层循环

  • 在嵌套的循环结构中,break用于退出所在循环体
  • 如果要退出外层循环体,需要使用标号的方式
    Java语言基础语法之流程控制语句
/*
    使用双重for循环打印九九乘法表
 */
public class ForForTableTest {
	
	public static void main(String[] args) {
		
		// 1.使用外层for循环控制打印的行数,一共9行
		outer:for(int i = 1; i <= 9; i++) {
			// 2.使用内层for循环控制打印的列数,最多9列,规律是:与当前行所在的行数相等
			for(int j = 1; j <= i; j++) {
				// 3.使用两个循环变量来拼接等式
				System.out.print(j + "*" + i + "=" + j*i + " ");
				// 4.当打印完毕6*6 = 36后结束整个打印
				if(6 == j) {
					//break; // 主要用于跳出循环,但该关键字只能跳出当前所在的循环
					break outer; // 表示可以跳出外层for循环
				}
			}
			System.out.println();
		}
	}
}

4.13 for循环实现猜数字游戏

/*
    编程使用for循环实现猜数字游戏
 */

import java.util.Random; 
import java.util.Scanner;
 
public class ForGuessTest {
	
	public static void main(String[] args) {
		
		// 1.随机生成1 ~ 100之间的整数并使用变量记录
		Random ra = new Random();
		int temp = ra.nextInt(100) + 1;
		//System.out.println("temp = " + temp);
		
		// 4.声明一个int类型的变量来统计用户猜测的次数
		int cnt = 0;
		
		for(;;) {
			// 2.提示用户输入1 ~ 100之间猜测的整数并使用变量记录
			System.out.println("请输入1 ~ 100之间猜测的整数:");
			Scanner sc = new Scanner(System.in);
			int num = sc.nextInt();
			cnt++;
			
			// 3.使用用户输入的整数与随机数之间比较大小并给出对应的提示
			if(num > temp) {
				System.out.println("猜大了,再小一点吧!");
			} else if(num < temp) {
				System.out.println("猜小了,再大一点吧!");
			} else {
				System.out.println("恭喜您猜对了,游戏结束!");
				break;
			}
		}
		
		if(1 == cnt) {
			System.out.println("你果然是个大咖!");
		} else if(cnt <= 6) {
			System.out.println("水平不错,继续加油哦!");
		} else {
			System.out.println("你还可以多玩几次游戏!");
		}
			
	}
}

4.14 双重for循环

	for(初始化表达式1; 条件表达式2; 修改初始值表达式3) {
		for(初始化表达式4; 条件表达式5; 修改初始值表达式6) {
			循环体;
		}
	}
  • 特点:
    • 在以后的开发中若需要打印多行多列时,需要使用双重循环
    • 多重循环不宜嵌套太多层,否则效率很低。一般到三重循环即可,最常见的就是双重循环

4.15 双重循环实现素数打印(除到平方根)

/*
	编程使用双重for循环打印2 ~ 100之间的所有素数
*/
public class ForForPrimeTest {
	
	public static void main(String[] args) {
		
		// 1.使用for循环打印2 ~ 100之间的所有整数
		for(int i = 2; i <= 100; i++) {
			
			// 3.声明一个boolean类型的变量作为是否为素数的标记
			boolean isPrime = true;
			// 2.针对每一个当前的整数都要判断是否为素数,若是素数则打印,否则不打印
			// 判断一个数是否为素数的方法是:若该数不能被2到它本身-1之间的所有整数整除时,则证明该数是素数
			// 使用内层for循环用于控制2到该数自身-1之间的范围
			// for(int j = 2; j < i; j++) {
			// 只需要判断2到该数的平方根即可,因为随着除数的增大商必然减小,会造成重复的判断
			for(int j = 2; j <= Math.sqrt(i); j++) {
				// 使用当前数除以该循环中的每个数据并判断是否可以整除,只要找到一个可以整除的数据,则证明该数不是素数
				if(0 == i % j) {
					isPrime = false;
					break; // 跳出当前所在的内层循环,也就是不需要再继续除以下一个整数
				}
			}
			
			// 只可以打印素数
			if(isPrime) {
				System.out.println("i = " + i);
			}
		}
	}
}

4.16 while循环

	while(条件表达式) {
		循环体;
	}
/*
    编程实现while循环的使用
 */
public class WhileTest {
	
	public static void main(String[] args) {
		
		// 使用while循环打印1 ~ 10之间的所有整数
		int i = 1;
		while(i <= 10) {
			System.out.println("i = " + i);
			i++;
		}
	}
}

4.17 比较 for 和 while 循环

  • while 循环和 for 循环完全可以互换,当然推荐使用 for 循环
  • 无限循环:while(true) 等价于 for(; ; ) (空格可以忽略)
  • while 循环更适合于明确循环条件但不明确循环次数的场合中
  • for 循环更适合于明确循环次数或范围的场合中

4.18 案例:while循环实现反向输出

Java语言基础语法之流程控制语句

/*
    编程使用while循环实现任意正整数的反向输出
 */

import java.util.Scanner; 
 
public class WhileReverseTest {
	
	public static void main(String[] args) {
		
		// 1.提示用户输入一个正整数并使用变量记录  123
		System.out.println("请输入一个正整数:");
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		
		// 2.使用while循环进行拆分并打印(此方法可以保存逆序后的最高位的0)
		//while(num > 0) {
			//System.out.print(num % 10);  // 拆分个位数
			//num /= 10;  // 丢弃个位数
		//}
		// 2.使用while循环拆分整数中的每个数字并记录到变量中
		int res = 0;
		int temp = num;  // 指定变量作为num的替身
		while(temp > 0) {
			res = res*10 + temp % 10; // 3     32   321
			temp /= 10;               // 12    1    0
		}
		
		// 3.打印逆序后的结果
		System.out.println(num + "逆序后的结果是:" + res);
	}
}

4.19 do while(熟悉)

  • 注意分号

  • 先执行再判断条件,即至少执行一次循环体

      do {
      	循环体;
      } while(条件表达式);
    
/*
    编程实现do while循环的使用
 */
public class DoWhileTest {
	
	public static void main(String[] args) {
		
		// 使用do while循环打印1 ~ 10之间的所有整数
		int i = 1;
		do {
			System.out.println("i = " + i);
			i++;
		} while(i <= 10);
		
	}
}

案例: 使用do while循环检查学习效果

/*
    编程使用do while循环来模拟学习效果的检查
 */

import java.util.Scanner; 
 
public class DoWhileCheckTest {
	
	public static void main(String[] args) throws Exception {
		
		String msg = null;  // 空 
 		do {
			System.out.println("正在疯狂学习中...");
			Thread.sleep(5000); // 模拟5秒钟
			System.out.println("是否合格?(y/n)");
			Scanner sc = new Scanner(System.in);
			msg = sc.next();
		} while(!"y".equals(msg));
		
		System.out.println("恭喜任务合格!");
	}
}

4.20 循环的笔试考点

// 典故: 十动然拒    笔试考点:有没有分号
// 以下代码可以顺利进行
	int i = 1;
	while(i <= 10000) {
		System.out.println("I Love You !");
		i++;
	}
// 多加一个分号;以后,程序卡住了
	int i = 1;
	while(i <= 10000) ; {
		System.out.println("I Love You !");
		i++;
		
// 上一段代码效果相当于:
	int i = 1;
	while(i <= 10000) {
		;  // 空语句,啥也不干,可以用于延时
	}
	
	{
	System.out.println("I Love You !");
	i++;
	}
所以程序才会卡住

总结

  • break 可以用在循环和 switch case分支结构中
  • continue 只能用于循环结构中,不能用于switch case分支结构
    Java语言基础语法之流程控制语句

本文地址:https://blog.csdn.net/qq_23187859/article/details/107073584