Java SE 03 选择结构

Java SE 03(选择结构

1.选择结构 if 语句

1.1单分支if语句
1.1.1 if 语句是一个结构,允许程序确定执行的路径。
1.1.2 特点:适合做单个判断
1.1.3 单分支 if 语句的语法如下:
if (布尔表达式){
语句(组):
}
1.1.4 执行流程:
  1. 首先判断布尔表达式的值是true还是false
  2. 如果是true就执行语句体
  3. 如果是false就不执行语句体
    在这里插入图片描述
注意:
  • 关系表达式无论简单还是复杂,结果必须是boolean类型
  • if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,则不
    能省略;建议永远不要省略
1.2 双分支 if-else 语句
1.2.1 if-else 语句根据条件是真或者是假,决定执行的路径。
1.2.2 特点::适合做两个判断
1.2.3 双分支 if-else 语句语法如下:
if (布尔表达式){
	布尔表达式为其时执行的语句 () 1;
}
else{
	布尔表达式为假时执行的语句 () 2;
}
1.2.4 执行流程:
  • 首先判断布尔表达式的值是true还是false
  • 如果是true执行语句体1
  • 如果是false执行语句体2
    在这里插入图片描述
1.2.5 双分支 if-else 语句和三元的相互转换问题
  • 三元运算符的操作都可以使用if语句改进,反之不成立
  • 当if语句控制的语句体是一条输出语句时,就不成立,因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句不能作为一个返回结果。
1.3 嵌套的 if 语句和多分支 if - else 语句
1.3.1 if 语句可以在另外一个 if 语句中,形成嵌套的 if 语句。
1.3.2 特点:适合做多个判断
1.3.3 多分支 if - else 语句语法格式
if(布尔表达式1){
	语句体1;
}else if(布尔表达式2){
	语句体2;
}
...
else{
	语句体n+1;
}
1.3.4 执行流程:
  1. 首先判断布尔表达式1的结果
  2. 如果是true就执行语句体1
  3. 如果是false就继续判断布尔表达式2的结果
  4. 如果是true就执行语句体2
  5. 如果是false就继续判断布尔表达式…
  6. 如果没有任何布尔表达式的值是true,就执行语句体n+1
    在这里插入图片描述

2. 选择结构switch语句

2.1 switch 语句基于变量或者表达式的值来执行语句。
2.2 switch 语句的完整语法:
switch (switch 表达式){
	case1: 语句 () 1;
			break;
	case2: 语句 () 2;
			break;
	...
	case 值 N: 语句 () N;
			break;
	default:默认情况下执行的语句 ()
2.3 switch 语句遵从下述规则:
  1. switch 表达式必须能计算出一个 char、byte、short、int 或者 String 型值,并且必
    须总是要用括号括住。
  2. 值 1 ,…,值 N 必须与 switch 表 达 式 的 值 具 有 相 同 的 数 据 类 型。注 意:值 1 ,…,值 N 都是常量表达式,也就是说这里的表达式是不能包含变量的,例如,不允许出现 1+x。
  3. 当 switch 表达式的值与 case 语句的值相匹配时,执行从该 case 开始的语句,直到遇到一个 break 语句或到达该 switch 语句的结束。
  4. 默认情况(default)是可选的,当没有一个给出的 case 与 switch 表达式匹配时,用来执行该操作。
  5. 关键字 break 是可选的。break 语句会立即终止 switch 语句。
2.4 执行流程:
  1. 首先计算表达式的值
  2. 其次,和case依次比较,一旦有对象的值,就会执行相应的语句,在执行的过程
    中,遇到break就会结束。
  3. 最后,如果所有的case都和表达式的值不匹配,就会执行defalut语句体部分,然
    后switch执行完毕。
    在这里插入图片描述

3. 选择结构 if 语句和 switch 语句的各自使用场景

3.1 if语句的使用场景:
  • 针对结果是boolean类型的判断
  • 针对一个范围的判断
  • 针对几个常量值的判断
3.2 switch语句使用场景:
  • 针对几个常量值的判断

4. 关键术语

英文中文
Boolean expression布尔表达式
Boolean data typeboolean 数据类型
Boolean value布尔值
conditional operator条件操作符
dangling-else ambiguity悬空 else 歧义
debugging调试
fall-through behavior落空行为
flowchart流程图
lazy operator懒惰操作符
operator associativity操作符结合规则
operator precedence操作符优先级
selection statement选择语句
short-circuit evaluation短路运算

编程练习题:

  1. (代数:解一元二次方程)可以使用下面的公式求一元二次方程 ax2+bx+c=0 的两个根:
    在这里插入图片描述
    可以使用 Math.pow(x,0.5)来计算x0.5
    下面是一些运行示例:

    Enter a, b, c: 1.0 3 1 Enter
    The equation has two roots -0.381966 and -2.61803
    Enter a, b, c:1 2.0 1 Enter
    The equation has one root -1
    Enter at bt c:1 2 3 Enter
    The equation has no real roots

    代码:

    import java.util.Scanner;
    class Demo3_1{
    	/*
    	数据:a b c d e f x delt
    	指令:
    	1.输入数据
    	2.计算delt
    	3.判断?
    		3.1 delt==0 计算出唯一解 x
    		3.2 delt>0 计算x1 x2
    		3.3 输出无解
    	*/
    	public static void main(String[] args){
    		Scanner scanner=new Scanner(System.in);
    		//1.
    		double a=scanner.nextDouble();
    		double b=scanner.nextDouble();
    		double c=scanner.nextDouble();
    		//2.
    		double delt=b*b-4*a*c;
    		
    		//3.
    		if(delt==0){
    			//3.1
    			double x=-b/(2*a);
    			System.out.printf("The equation has one root f",x);
    		}else if(delt>0){
    			//3.2
    			double x1=(-b+Math.pow(delt,0.5))/(2*a);
    			double x2=(-b-Math.pow(delt,0.5))/(2*a);
    			System.out.printf("The equation has two rootst %f and %f" x1,x2);
    		}else {
    			//3.3
    			System.out.println("No real root.");
    		}
    	}
    }
    
  2. (回文数字)编写一个程序,提示用户输入一个三位的整数,然后确定它是否回文数字。当从左到右,以及从右到左都是一样的话,这个数字称为回文数。

    下面是程序的一个运行示例:

    Enter a three-digit integer: 121 Enter
    121 is a palindrome
    Enter a three-digit integer: 123 Enter
    123 is not a palindrome

    import java.util.Scanner;
    class Demo3_2{
    	/*
    	数据:一个三位整数 个位 十位 百位
    	指令:
    	1.输入一个数字
    	2.将数字进行拆分个位a 十位b 百位c
    	3.重新组装一个新数字 a*100+b*10+c
    	4.判断该数字与原数字是否相同
    	*/
    	public static void main(String[] args){
    		Scanner scanner = new Scanner(System.in);
    		System.out.printf("Enter a three-digit integer:");
    		int num=scanner.nextInt();
    		int n=num;
    		int a=n%10;
    		n/=10;
    		int b=n%10;
    		n/=10;
    		int c=n%10;
    		int newnum=a*100+b*10+c;
    		if(newnum==num){
    			System.out.printf("%d is a palindorme.",num);
    		}else{
    			System.out.printf("%d is not a palindorme.",num);
    		}
    	}
    }
    
  3. (游戏:剪刀、石头、布)编写可以玩流行的剪刀、石头、布游戏的程序。(剪刀可以剪布,石头可以砸剪刀,而布可以包石头。)程序随机产生一个数,这个数为 0、1或者 2, 分别表示石头、剪刀和布。程序提示用户输入值 0、1或者 2, 然后显示一条消息,表明用户和计算机谁贏了游戏,谁输了游戏,或是打成平手。

    下面是运行示例:

    scissor (0), rock (1), paper (2): 1 Enter
    The computer is scissor. You are rock. You won
    scissor (0), rock (1), paper (2): 2 Enter
    The computer is paper. You are paper too. It is a draw

    import java.util.Scanner;
    class Demo3_3{
    	/*
    	数据:电脑随机生成(0,1,2) 用户输入(0 1 2)
    	指令:
    	1.电脑随机生成
    	2.获取用户输入
    	3.进行比对
    		3.1 usr==com 平局
    		3.2  (com+1)%3==usr 用户赢
    			(com+1)%3	1 2 0
    				usr		0 1 2
    		3.3 用户输
    	4.结束
    	*/
    	public static void main(String[] args){
    		Scanner scanner=new Scanner(System.in);
    		//1.
    		int com=(int)(Math.random()*3);
    		System.out.print("scissor(0) rock(1) paper(2):");
    		//2.
    		int usr=scanner.nextInt();
    		String comStr="";
    		String usrStr="";
    		if(com==0){
    			comStr="scissor";
    		}else if(com==1){
    			comStr="rock";
    		}else{
    			comStr="paper";
    		}
    		if(usr==0){
    			usrStr="scissor";
    		}else if(usr==1){
    			usrStr="rock";
    		}else{
    			usrStr="paper";
    		}
    		//3.
    		if(com==usr){
    		//3.1
    			System.out.printf("The computer is %s.You are %s.It is a draw",comStr,usrStr);
    		}else if((com+1)%3==usr){
    			//3.2
    			System.out.printf("The computer is %s.You are %s.You win",comStr,usrStr);
    		}else{
    			//3.3
    			System.out.printf("The computer is %s.You are %s.You lose",comStr,usrStr);
    		}
    	}
    }
    
  4. (几何:点是否在圆内?)编写程序,提示用户输入一个圆的圆心坐标(ox,oy)、半径和一个点P(x, y),然后检査这个点是否在圆内。

    下面是运行示例:

    Enter circle ox,oy,r: 2 2 2 Enter
    Enter a point P: 1 1 Enter
    Point P(1.0,1.0) in the circle.
    Enter circle ox,oy,r:1 2 3 Enter
    Enter a point P:4 4 Enter
    Point P(4.0,4.0) not in the circle.

    import java.util.Scanner;
    class Demo3_4{
    	/*
    	点是否在圆内
    	数据:圆心坐标ox oy 半径r  点px py
    	指令:
    	1.输入数据
    	2.计算op距离
    	3.判断r>op
    		3.1 输出点p在圆内
    		3.2 输出点p在圆外
    	*/
    	public static void main(String[] args){
    		Scanner scanner=new Scanner(System.in);
    		System.out.printf("Enter circle ox,oy,r:");
    		//1.
    		double ox=scanner.nextDouble();
    		double oy=scanner.nextDouble();
    		double r=scanner.nextDouble();
    		System.out.printf("Enter a point P(x,y):");
    		double px=scanner.nextDouble();
    		double py=scanner.nextDouble();
    		//2.
    		double op=Math.pow((Math.pow((px-ox),2)+Math.pow((py-oy),2)),0.5);
    		//3.
    		if(r>op){
    			System.out.printf("Point P(%.1f,%.1f) in the circle.",px,py);
    		}else{
    			System.out.printf("Point P(%.1f,%.1f) not in the circle.",px,py);
    		}
    	}
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值