非科班学JAVA 第5天—流程控制语句

在一场比赛中,只有弱势方才需要裁判,才寻求公正。真正的强者和有长远眼光的运动员,会做好自己应该做的事,并且专心做到更好。我们在比赛的时候,面对任何判罚,都不要波动,接受现实,用自己的方式回应对手。

说到流程控制,最先想到的肯定是ifelse,elseif,没错,这是计算机语言的交流基础,什么语言都需要流程控制。
让我们一起去探索它们在java中更深的奥秘。
同时还会讲到循环语句,for,while,dowhile.

第一节:分支结构(重要)
说到分支结构,我们先说顺序结构,顺序结构就是:你开火了就下油炒菜上菜吃饭。一环扣一环。
那么分支结构就要多考虑:开火了,有没有油?有就下油,没有就去买。
在这里插入图片描述

1、先提到if和ifelse,因为这个没什么特别的,非常简单,选择直接带过。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主要关注几个经典案例:
在这里插入图片描述

/*
编程使用if else if else分支结构来计算个人所得税
*/

import java.util.Scanner;

public class IfSalaryTest {

public static void main(String[] args) {
	
	// 1.提示用户输入个人的薪水并使用变量记录
	System.out.println("请输入您的薪水:");
	Scanner sc = new Scanner(System.in);
	// 局部变量:作用范围是从声明开始一直方法体结束
	int salary = sc.nextInt();
	
	// 2.使用if else if else分支结构判断薪水所在的范围并计算对应的个人所得税
	// 个人所得税公式: 本月应纳税所得额 * 对应的税率 - 速算扣除数
	double salaryPrice = 0.0;
	if(salary <= 5000) {
		System.out.println("无需纳税!");
	}
	else if(salary <= 8000) {
		// 块变量:作用范围是从声明开始一直到当前语句块结束
		//double salaryPrice = (salary - 5000) * 0.03;
		//salaryPrice = (salary - 5000) * 0.03;
		salaryPrice = (salary - 5000) * 0.03 - 0;
	}
	else if(salary <= 17000) {
		//salaryPrice = (salary - 8000) * 0.1 + (8000 - 5000) * 0.03;
		salaryPrice = (salary - 5000) * 0.1 - 210;
	}
	else if(salary <= 30000) {
		//salaryPrice = (salary - 17000) * 0.2 + (17000 - 8000) * 0.1 + (8000 - 5000) * 0.03;
		salaryPrice = (salary - 5000) * 0.2 - 1410;
	}
	// ...
	
	// 3.打印最终的计算结果
	System.out.println("最终的个人所得税是:" + salaryPrice);
}

}

在这里插入图片描述

/*
编程使用if分支结构实现出租车计费系统的实现
*/

import java.util.Scanner;

public class IfTaxiTest {

public static void main(String[] args) {
	
	// 1.提示用户输入公里数和等待的秒数并使用变量记录
	System.out.println("请输入公里数和等待的秒数:");
	Scanner sc = new Scanner(System.in);
	int km = sc.nextInt();
	int sec = sc.nextInt();
	
	// 2.根据公里数计算对应的里程费并使用变量记录
	int kmPrice = 0;
	if(km <= 3) {
		kmPrice = 13;
	} else if(km <= 15) {
		kmPrice = 13 + (km - 3) * 2;
	} else {
		kmPrice = 13 + (15 - 3) * 2 + (km - 15) * 3;
	}
	
	// 3.根据等待的秒数来计算对应的等待费并使用变量记录
	int secPrice = sec / 150;
	
	// 4.计算总费用并打印
	int sumPrice = kmPrice + secPrice;
	System.out.println("本次出租车的总费用是:" + sumPrice);
}

}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/*
编程使用switch case分支结构来模拟菜单的效果
*/

import java.util.Scanner;

public class SwitchMenuTest {

public static void main(String[] args) {
	
	// 1.绘制字符界面
	System.out.println("         欢迎来到拉勾教育");
	System.out.println("-------------------------------------");
	System.out.print(" [1]学员系统     ");
	System.out.println("[2]管理员系统");
	System.out.println(" [0]退出系统");
	System.out.println("-------------------------------------");
	System.out.println("请选择要进入的系统:");
	Scanner sc = new Scanner(System.in);
	int choose = sc.nextInt();
	
	// 2.使用switch case分支结构来模拟用户的选择并给出提示
	switch(choose) {
		case 1: System.out.println("正在进入学员系统..."); break;
		case 2: System.out.println("正在进入管理员系统..."); break;
		case 0: System.out.println("谢谢使用,下次再见!"); break;
		default: System.out.println("输入错误,请重新选择!");
	}
}

}

注意一下case穿透

第二节:循环结构(这个非常重要,也更难一些)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/*
编程使用for循环打印三位数中的所有水仙花数
*/
public class ForWaterTest {

public static void main(String[] args) {

	// 1.使用for循环打印所有的三位数
	for(int i = 100; i <= 999; i++) {
		
		// 3.拆分三位数中的各个数位上的数字
		// 123 / 100 = 1;        123 % 100 => 23 / 10 = 2;    123 % 10 = 3;
		int ia = i / 100;      // 拆分百位数
		int ib = i % 100 / 10; // 拆分十位数
		int ic = i % 10;       // 拆分个位数
		
		// 2.针对每个三位数都要判断该数是否为水仙花数,若是则打印,否则不打印
		// 判断该数是否等于各个数位的立方和
		if((ia*ia*ia + ib*ib*ib + ic*ic*ic) == i) {
			System.out.println("i = " + i);
		}
	}
}

}
在这里插入图片描述
在这里插入图片描述

/*
编程实现continue关键字的使用
*/
public class ForContinueTest {

public static void main(String[] args) {
	
	// 1.使用for循环打印1 ~ 20之间的所有整数
	for(int i = 1; i <= 20; i++) {
		// 若遇到5的倍数则跳过不打印该数,转而继续打印下一个数
		if(0 == i % 5) {
			continue; // 表示提前结束本次循环,继续下一次循环,也就是奔向了i++
		}
		System.out.println("i = " + i);
	}
}

}
在这里插入图片描述
在这里插入图片描述

/*
编程使用for循环和break关键字来模拟聊天的过程
*/

import java.util.Scanner;

public class ForBreakTest {

public static void main(String[] args) {
	
	// 5.声明一个boolean类型的变量作为发送方的标志
	boolean flag = true;
	
	// 4.使用无限循环来模拟不断地聊天
	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.若不是则打印用户输入的聊天内容
		//else {
			//System.out.println("聊天内容是:" + str);
		//}
		System.out.println((flag? "张三说:": "李四说:") + str + "\n\n\n");
		flag = !flag;
	}
	// ...
}

}

在这里插入图片描述

/*
编程使用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("你还可以多玩几次游戏!");
	}
	
	
}

}
在这里插入图片描述
在这里插入图片描述

/*
编程使用双重for循环打印星星图案
*/
public class ForForStarTest {

public static void main(String[] args) {
	
	// 1.打印第一个星星图案
	// 外层循环主要用于控制打印的行数
	for(int i = 1; i <= 5; i++) {
		// 内层循环主要用于控制打印的列数
		for(int j = 1; j <= 5; j++) {
			System.out.print("*");
		}
		System.out.println();
	}
	
	System.out.println("--------------------------------------------");
	// 2.打印第二个星星图案
	// 外层循环主要用于控制打印的行数
	for(int i = 1; i <= 5; i++) {
		// 内层循环主要用于控制打印的列数  也就是当前行的列数与当前行的行数是相等关系
		for(int j = 1; j <= i; j++) {
			System.out.print("*");
		}
		System.out.println();
	}
	
	System.out.println("--------------------------------------------");
	// 3.打印第三个星星图案
	// 外层循环主要用于控制打印的行数
	for(int i = 1; i <= 5; i++) {
		// 内层循环主要用于控制打印的列数  也就是当前行的列数与当前行的行数相加为6的关系
		for(int j = 1; j <= 6-i; j++) {
			System.out.print("*");
		}
		System.out.println();
	}
	
	System.out.println("--------------------------------------------");
	// 4.打印第四个星星图案
	// 外层循环主要用于控制打印的行数
	for(int i = 1; i <= 5; i++) {
		// 控制空格的个数
		for(int j = 1; j <= 5-i; j++) {
			System.out.print(" ");
		}
		// 内层循环主要用于控制打印的列数  也就是当前行的列数与当前行的行数为 2*i-1 的关系
		for(int j = 1; j <= 2*i-1; j++) {
			System.out.print("*");
		}
		System.out.println();
	}
}

}
在这里插入图片描述
在这里插入图片描述

/*
使用双重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();
	}
}

}

在这里插入图片描述

/*
编程使用双重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 flag = 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) {
				flag = false;
				break; // 跳出当前所在的内层循环,也就是不需要再继续除以下一个整数
			}
		}
		
		// 只可以打印素数
		if(flag) {
			System.out.println("i = " + i);
		}
	}
}

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/*
编程使用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循环进行拆分并打印
	//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);
}

}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/*
编程使用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("恭喜任务合格!");
	
	System.out.println("-------------------------------------------------------------");
	// 典故: 十动然拒    笔试考点:有没有分号
	int i = 1;
	while(i <= 10000) {
		;  // 空语句,啥也不干,可以用于延时
	}
	{
		System.out.println("I Love You !");
		i++;
	}
}

}

这三个循环中,中有doWhile 最后需要加分号的,代表着结束符。在其他循环语句中要注意分号的使用,这是考试的重点,

本章中我觉得没有特别难点,重点是熟悉运用,比较动脑的就是反向输出数字的算法和求素数的时候,循环表达式节省到平方根,是比较巧妙的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值