流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的种基本流程结构,即: 顺序结构、分支结构、循环结构
顺序结构 :程序从上到下逐行地执行,中间没任何判断和跳转。
分支结构 :If-else结构;switch-case结构。
switch和if语句的对比:
if和switch语句很像,具体什么场景下,应用哪个语句呢?
①如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几
种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
②其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
也就是说,使用switch-case的,都可以改写为if-else。反之不成立。
分支结构 :
①根据条件,择性地执行某段代码。
②if…else和switch-case两种分支语句。
分支结构中的if-else(条件判断结构)
1、三种结构:
第一种:
if(条件表达式){
执行代码块;
}
第二种:二选一
if(条件表达式){
执行代码块1;
}else{
执行代码块2;
}
第三种:多选一
if(条件表达式1){
执行代码块1;
}else if (条件表达式2){
执行代码块2;
}
……
else{
执行代码块n;
}
if-else练习1:
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
说明:
1.else结构是可选的。
2.针对于条件表达式:
>如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
>如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
>如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的前面。否则,范围小的就没机会执行了。
import java.util.Scanner;//函数调用
class IfExer1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你的成绩,以换取将励:");
int score = scan.nextInt();
if (score == 100){
System.out.println("将励一辆BMW");
}else if (score > 80 && score <= 99){
System.out.println("将励一部iphone手机");
}else if (score >= 60 && score <= 80){
System.out.println("将励一台ipad");
}else{
System.out.println("什么将励也没有");
}
}
}
if-else练习2:
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
说明:
①if-else结构是可以相互嵌套使用的。
②如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是不建议省略。
import java.util.Scanner;
class IfExer2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = scan.nextInt();
System.out.println("请输入第二个整数:");
int num2 = scan.nextInt();
System.out.println("请输入第三个整数:");
int num3 = scan.nextInt();
if (num1 > num2){
if (num3 > num1){
System.out.println(num2 + "," + num1 + "," + num3);
}else if (num3 < num2){
System.out.println(num3 + "," + num2 + "," + num1);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
}
}else if(num2 > num1){
if (num3 >num2){
System.out.println(num1 + "," + num2 + "," + num3);
}else if (num3 < num1){
System.out.println(num3 + "," + num1 + "," + num2);
}else{
System.out.println(num1+ "," + num3 + "," + num2);
}
}
}
}
if-else练习3:
我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人类的年龄。如果用户输入负数,请显示一个提示信息。
import java.util.Scanner;
class IfExer3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入狗存活多少年了:");
int dogage = scan.nextInt();
int X = dogage - 2;
int Y = X * 4;
int Z = Y + 21;
double W = dogage * 10.5;
if (dogage > 2){
System.out.println("狗的相对年龄:" + Z);
}else if(dogage >= 0){
System.out.println("狗的相对年龄:" + W);
}else{
System.out.println("输入年限错误");
}
}
}
if-else练习4:
假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,然后按照下面的规则判定用户是否能赢。
1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。
3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。
4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。
提示:使用(int)(Math.random() * 90 + 10)产生随机数。
Math.random() : [0,1) * 90 -> [0,90) + 10 -> [10,100) -> [10,99]
import java.util.Scanner;
class IfExer4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个两位数:(10-99)");
int number = scan.nextInt();
int num1 = number / 10;
int num2 = number % 10;
int value = (int)(Math.random() * 90 + 10);
System.out.println(value);
int v1 = value / 10;
int v2 = value % 10;
if (num1 == v1 && num2 == v2){
System.out.println("中奖10000$");
}else if (num1 == v2 && num2 == v1){
System.out.println("中奖3000$");
}else if (num1 == v1 || num2 == v2){
System.out.println("中奖1000$");
}else if (num1 == v2 || num2 == v1 ){
System.out.println("中奖500$");
}else{
System.out.println("此票作废");
}
}
}
if-else练习5:
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”
提示:
Sysout(“身高: (cm))
scanner.nextInt();
Sysout(“财富: (千万))
scanner.nextDouble();
Sysout(“帅否: ①(true/false)) ②(是/否)
scanner.nextBoolean(); scanner.next(); “是”.equals(str)
import java.util.Scanner;
class IfExer5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你的身高:(cm)");
int height = scan.nextInt();
System.out.println("请输入你的财富:(千万)");
double wealth = scan.nextDouble();
/*
①
System.out.println("请输入你是否帅:(true/false)");
boolean isHandsome = scan.nextBoolean();
if (height >= 180 && wealth >= 1 && isHandsome){
System.out.println("我一定要嫁给他!!!");
}else if (height >= 180 || wealth >= 1 || isHandsome){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁!");
}
*/
//②
System.out.println("请输入你是否帅:(是/否)");
String isHandsome = scan.next();
if (height >= 180 && wealth >= 1 && isHandsome.equals("是")){
System.out.println("我一定要嫁给他!!!");
}else if (height >= 180 || wealth >= 1 || isHandsome.equals("是")){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁!");
}
}
}