java基础知识---选择

这篇博客详细介绍了Java中的选择结构,包括顺序结构、单分支if、双分支if-else、嵌套if、多分支if-else、三目运算符以及switch语句的格式、执行流程和注意事项。强调了switch语句与if语句的区别,以及在不同场景下的适用性。同时给出了如何生成随机数、判断剪刀石头布游戏结果和回文数字的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.1 .顺序结构语句

   顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,
它的执行顺序是自上而下(从上到下并不是真的从第一行向最后一行运行,而是按照程
序的执行流程一行一行往下走,从主函数里面一行一行往下走),依次执行。

3.2. 选择结构if语句格式
语句根据条件是真或者是假,决定执行的路径。

①单分支if语句

if(布尔表达式){
      语句体;
      }

**执行流程

   首先判断条件表达式,如果值为true,那么就执行if语句所控制的语句体。
   如果为false,就不执行语句体。

在这里插入图片描述
**注意事项

 (1)if(条件表达式)其后没有分号。
       一般来说,有"{}"有没有";",有";"就没有"{}"
 (2)if语句所控制的语句如果是一条语句,我们可以不写大括号;
   如果控制的是两条以上的语句,必须加大括号。
   if语句的控制体没有加大括号是其后跟的一条语句。
   建议:永远加上大括号。避免不必要的错误

②双分支if-else语句

if(布尔表达式){
		语句体;
		}
else{
		语句体;
		}

**执行流程

   首先判断条件表达式,如果值为true,那么就执行语句1。
   如果为false,就执行语句2。

在这里插入图片描述

③嵌套if语句

if(布尔表达式){
	if(布尔表达式){
		语句体;
		}
		语句体;
	}

④多分支if-else语句

 if(布尔表达式){
 		语句体;
 }else if(布尔表达式){
 		语句体;
 }else{
 		语句体;
 }     		

在这里插入图片描述
else可以省略,但是不建议。
(1)是第三种格式的组成部分。
(2)有可能没有判断完所有的情况,就可以使用else来完成特殊情况。
**执行流程

     虽然格式很长,但是,它整体只是一条语句。
     不断的判断,只要有满足条件的条件表达式,就执行该判断处控制的语句体,
   执行完后。语句结束。当都不满足时候,执行else。

** if语句注意事项

(1)if后面必须有条件表达式。  else后面可以没有条件表达式。
(2)if语句的嵌套,if语句里面的语句体还是if语句。
(3)关系表达式无论简单还是复杂,结果必须是boolean类型
(4) if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,
   则不能省略;建议永远不要省略
(5)一般来说:有左大括号姐没有分号,有分号就没有左大括号。

**三种if语句分别适合做什么事情

格式1:适合做单个判断
格式2:适合做两个判断
格式3:适合做多个判断

3.3 if改写成三目运算符: 表达式?值1:值2;

**区别:

(1)三元运算符中只能是值,不能是输出一句话。
(2)所有的三元运算符都可以用if语句改写。反之不行。
    当if语句控制的语句体是一条输出语句时,就不成立,因为三元运算符是一个运算符,
  必须要求有一个结果返回。而输出语句不能作为一个返回结果。

3.4 选择语句中常见的错误和陷阱

错误

(1)忘记必要的括号。
(2)在if行出现错误的分号
(3)对布尔值的荣誉测试
(4)悬空else出现的歧义
(5)两个浮点数值的相等测试

陷阱

(1)简化布尔变量赋值
(2)避免不同情形中的重复代码

3.5 选择结构switch语句的格式及其解释

一般形式:

switch(表达式){ 
case 常量表达式1:  语句1;break;
case 常量表达式2:  语句2;break;
… 
case 常量表达式n:  语句n;break;
default:  语句n+1;[可选的]
}

在这里插入图片描述

意思是:先计算表达式的值,再逐个和case 后的常量表达式比较,若不等则继续往下比较,若一直不等,则执行default后的语句;若等于某一个常量表达式,则从这个表达式后的语句开始执行,并执行后面所有case后的语句。

3.6 选择结构switch语句的注意事项

  ①switch 表达式必须能计算出一个char、byte、 short、 int 或者String型值,
并且必须总是要用括号括住。(char和String类型将在下一章介绍。)
  ②value1, ... valueN必 须与switch表达式的值具有相同的数据类型。注意  valuel, ... valueN
都是常量表达式,也就是说这里的表达式是不能包含变量的,例如,1允许出现1+X。
  ③当switch表达式的值与case语句的值相匹配时,执行从该case开始的语句,
直到遇到一个break语句或到达该swi tch语句的结束,
  ④默认情况(default)是可选的,当没有一个给出的case与switch表达式匹配时用来执行该操作。
default可以在任意位置 ,不一定在最后。                                                                                               
  ⑤关键字break是可选的。break语句会立即终止switch语句。break可以省略,但是当前不结束。
  ⑥switch中可以在case中嵌套if-else语句。
  ⑦ase后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的

**警告不要忘记在需要的时候使用break语句。一旦匹配其中一个case,就服从匹配。

3.7 switch与if语句的不同:

If语句中若判断为真则只执行这个判断后的语句,执行完就跳出if语句,不会执行其他if语句;

switch语句不会在执行判断为真后的语句之后跳出循环,而是继续执行后面所有case语句。在每一case语句之后增加break 语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

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

 switch 建议判断固定值的时候用
 if建议判断区间或范围的时候用
 用switch能做的,用if都能做,反之不行。

3.8.产生随机数方法
Math.random()获取一个[0,1)之间的随机double值。
想要得到某一个范围内的数:只需乘上相应的倍数,或者加上相应的数字。

3.10 小结

1.选择语句用于可选择的动作路径的编程。选择语句有以下几种类型:单分支f语句、、嵌套计语句、多分支if-e1se语句、switchi语句和条件表达式。
2.各种if语句都是基于布尔表达式来控制决定的。根据表达式的值是true或者false,这些语句这些语句选择两种可能路径中的一种。
3. switch语句根据char、byte、short、int 或者String类型的switch表达式来进行控制决定。
4.在switch语句中,关键字break是可选的,但它通常用在每个分支的结尾,以中止执行switch语句的剩余部分。如果没有出现break语句,则执行接下来的case语句。

3.11 经典例题:

  1. 游戏:(剪刀、石头、布)编写可以玩流行的剪刀-石头-布游戏的程序。(剪刀可以剪布,石可以砸剪刀,而布可以包石头。)程序提示用户随机产生一个数,这个数为0、1或者2,分别表示石头、剪刀和布。程序提示用户输人值0、1或者2,然后显示一条消息,表明用户和计算机谁赢了游戏,谁输了游戏,或是打成平手。

    import java.util.Scanner;
    public class Demo1 {	//剪刀 0     石头 1    布2
      public static void main(String args[]){
    	int com=(int)(Math.random()*3);
    	Scanner sc=new Scanner(System.in);	
    	System.out.print("Enter a number");
    	int user=sc.nextInt( );		
    	String x="";
    	String y="";
    	if(user==0) {
    		  x="scissor";
    		}else if(user==1) {
    	    x="rock";
    		}else{
    	        x="cloth";
    		}
    		if(com==0) {
    			   y="scissor";
    		}else if(com==1) {
    		       y="rock";
    		}else{
    		        y="cloth";
    			}
    	if(com==user) {
    		System.out.println("com"+y+" user"+x+"平局");
    	}else if((com+1)%3==user) {
    		System.out.println("com"+y+" user"+x+"用户赢");
    	}else {
    		System.out.println("com"+y+" user"+x+"用户输");
    	}
    }
    }
    

    这是一种简洁的解题思路:石头能胜出剪刀,即1胜出0;布能胜出石头,即2胜出1;剪刀能胜出布,即0胜出2;总结相邻的两个数字大的能胜出小的。不相邻的两数电脑产生的数+1对3取余,如果相等就是用户赢,否则用户输。

  2. (回文数字) 编写一个程序,提示用户输人一个三位的整数,然后确定它是否回文数字。当从左到右,以及从右到左都是-一样的话,这个数字称为回文数。

    import java.util.*;
    public class Demo1{
     public static void main(String args[]){
      Scanner sc=new Scanner(System.in);
      System.out.print("Enter a number");
        int user=sc.nextInt( );
        int oriNum=num;
        int a=num/1000;//千位
        num%=1000;
        int b=num/100;//百位
        num%=100;
        int c=num/10;//十位
        int d=mun%10;//个位
     	newNum=d*1000+c*100+b*10+a;	//重新组装新数字
        if(oriNum==newNum){
    	     System.out.println("是回文数字");
    	}else{
    	   System.out.println("不是回文数字");
     	}
      }
    }
    

这个题的思路是:将一串数字每一位都拆分出来,在将原先的个位组成新数字的最高位,原先的最高位组成新数字的最低位,以此类推。求出新数字,将其和原数字比较,一致就是回文数字,否则不是回文数字。

  1. 判断一个矩形是否在一个矩形内
    在这里插入图片描述
    解题思路:

    写出外面矩形的四边的方程
    写出里面矩形的四边的方程
    分别求出里面矩形每一边与外面矩形两边的交点(一条边两个)。
      判断里面矩形的顶点是否超过交点(比较其x,y的值)
        如果超过交点里面矩形没有在外矩形内
        否则:在外矩形内。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值