判断结构(if)

if 语句是一个结构,允许程序确定执行的路径。
Java 有几种类型的选择语句:单分支 if 语句、双分支 if-else 语句、嵌套 if 语句、多分支 if-else 语句、switch 语句和条件表达式。 单分支 if 语句是指当且仅当条件为 true 时执行一个动作。

单分支 if 语句的语法如下:

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

流程图为:

Java 双重校验锁 javaif双重判断_System


当指定条件为 true时单分支 if 语句执行一个操作。而当条件为 false时什么也不干。 但是,如果你希望在条件为 false 时也能执行一些动作,该怎么办呢?你可以使用双分支 if 语句。根据条件为 true 或 false, 双分支 if 语句可以指定不同的操作

双分支的if语句的语法如下:

if (布尔表达式){

布尔表达式为其时执行的语句(组);

} else{ 布尔表达式为假时执行的语句(组);

}

流程图为:

Java 双重校验锁 javaif双重判断_嵌套_02

嵌套的 if语句和多分支 if-else 语句

if语句可以在另外一个 if语句中,形成嵌套的 if语句。if 或if-else 语句中的语句可以是任意合法的 Java语句,甚至可以是其他的if 或ifelse 语句。内层 if语句称为是嵌套在外层 if语句里的。内层 if语句还可以包含其他的 if 语句;事实上,对嵌套的深度没有限制。

基于知识点,我们接下来看看选择结构解决具体问题的代码实现:

Java 双重校验锁 javaif双重判断_System_03

class Class06{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);//创建Scanner对象,用于输入数据
        System.out.println("请输入a、b、c:");//提示用户输入数据abc
        double a=scanner.nextDouble();
        double b=scanner.nextDouble();
        double c=scanner.nextDouble();
        double delt=b*b-4*a*c;//计算delt判别式的值
        if(delt>0){//根据delt的值进行分类
            double x1=(-b+Math.sqrt(delt))/2*a;
            double x2=(-b-Math.sqrt(delt))/2*a;
            System.out.println(x1+":"+x2);
        }else if(delt==0){
            double x=(-b-Math.sqrt(delt))/2*a;
            System.out.println(x);
        }     else{
            System.out.println("无实数解!");
        }  
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_if语句_04


Java 双重校验锁 javaif双重判断_嵌套_05

class Class08{
    public static void main(String[] args){
        String[] s={"scissor","rock","paper"};
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入:");//提示用户输入数据
        int usr=scanner.nextInt();
        Random random=new Random();//创建一个任意数对象
        int com=random.nextInt(3);//输入[0,2)
        if(usr<0||usr>2){
            System.out.println("请输入0~2");
            return;
        }
        if(usr==com){
            System.out.println("用户是:"+s[usr]+",电脑是:"+s[com]+",平局");
        }else if(usr-com==0||usr-com==-2){
            System.out.println("用户是:"+s[usr]+",电脑是:"+s[com]+",用户胜");
        }
            else{
                 System.out.println("用户是:"+s[usr]+",电脑是:"+s[com]+",电脑胜");   
                }
        }
    }

运行结果为:

Java 双重校验锁 javaif双重判断_System_06


Java 双重校验锁 javaif双重判断_System_07

import java.util.Scanner;
class Demo05{
    public static void main(String[] args){
        Random random=new Random();
        int comNumber=random.nextInt(90)+10;
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个两位数:");//提示用户输入
        System.out.println(comNumber);
        int usrNumber=scanner.nextInt();
        if(usrNumber<10||usrNumber>99){
            System.out.println("输入数字错误!程序结束!");
            return;//结束当前函数
        }
        int comNumberA=comNumber/10;
        int comNumberB=comNumber%10;
        int usrNumberA=usrNumber/10;
        int usrNumberB=usrNumber%10;
        if(comNumber==usrNumber){
            System.out.println("奖金为10000美元!");
        }else if(comNumberA==usrNumberB&&comNumberB==usrNumberA){
            System.out.println("奖金为3000美元!");
        }     else if(comNumberA==usrNumberA||comNumberA==usrNumberB||
                      comNumberB==usrNumberA||comNumberB==usrNumberB){
                          System.out.println("奖金为1000美元!");
                }  else{
                    System.out.println("谢谢惠顾!");
                }  
        }
}

运行结果为:

Java 双重校验锁 javaif双重判断_System_08

多分支结构(switch)

switch 语句基于变量或者表达式的值来执行语句。
有时候处理问题为了全面考虑所有的情况,需要使用嵌套的 if 语 句。过多地使用嵌套的 if 语句会使程序很难阅读。Java提供 switch 语句来有效地处理多重 条件的问题。
switch 语句遵从下述规则:
① switch 表达式必须能计算出一个 char、byte、short,int或者 String 型值,并且必 须总是要用括号括住。
② valuel,. . . ,valueN 必须与 switch 表 达 式 的 值 具 有 相 同 的 数 据 类 型。注意: valuel, valueN 都是常量表达式,也就是说这里的表达式是不能包含变量的,例如,不 允许出现 1+X。
③ 当 switch 表达式的值与 case 语句的值相匹配时,执行从该 case开始的语句,直到 遇到一个 break 语句或到达该switch 语句的结束。
④ 默认情况(default)是可选的,当没有一个给出的 case 与 switch 表达式匹配时, 用来执行该操作。
⑤ 关键字 break 是可选的。break 语句会立即终止 switch 语句
注意:不要忘记在需要的时候使用 break 语句。一旦匹配其中一个 case, 就从匹配的case 处开始执行,直到遇到 break 语句或到达 switch 语句的结束。

循环结构(while和do while和for)

while循环

while 循环在条件为真的情况下,重复地执行语句。

while 循环的语法如下 :

while( 循环继续条件) {
 // 循环体 语句 ( 组);
 }

流程图如下:

Java 双重校验锁 javaif双重判断_嵌套_09


下面的题应用到了while循环,我们具体来解一下这两道题:

Java 双重校验锁 javaif双重判断_嵌套_10

class Home12{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个十进制数:");//提示用户输入
        int num=scanner.nextInt();
        String str="";//创建一个空字符串
        while(true){
            int rest=num%16;
            if(rest<10){
                str=rest+str;
            }else{
                str=(char)(55+rest)+str;//转换为ASII码表中的A~F
            }
            num=num/16;
            if(num==0){
                break;
            }
        }
        System.out.println(str);
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_System_11


Java 双重校验锁 javaif双重判断_System_12

class Class14{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int number=scanner.nextInt();
        while(true){
            boolean flag=true;//结束
            for(int i=2;i<number;i++){
                if(number%i==0){
                    System.out.print(i+",");
                    number=number/i;
                    flag=false;//未结束
                    break;
                }    
            }
            if(flag){
                System.out.print(number+".");
                break;        }
        }
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_嵌套_13

do-while循环

do-while 循环和 while 循环基本一样,不同的是它先执行循环体一次,然后判 断循环继续条件。 do-while 循环是 while 循环的变体。

它的语法如下:

do{
 // 循环体;
 语句(组);
 } while ( 循环继续条件);

流程图如下:

Java 双重校验锁 javaif双重判断_嵌套_14


下面这题应用到了do-while循环,我们具体来解一下这道题:

Java 双重校验锁 javaif双重判断_System_15

class Home13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter an integer,the input ends if it is 0:");//提示用户输入
        int value=0;
        int total=0;
        int positives=0;
        int negatives=0;
        int sum=0;
        double average=0;
            do{
            value=scanner.nextInt();
            if(value>0){
                positives=positives+1;//正数个数加一
            }if(value<0){
                negatives=negatives+1;//负数个数加一
            }
            sum=sum+value;
            }while(value!=0);
            total=negatives+positives;
            average=(double)sum/total;
        System.out.println("The number of positives is"+positives);
        System.out.println("The number of negatives is"+negatives);
        System.out.println("The tatal is"+total);
        System.out.println("The average is"+average);
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_if语句_16

for循环

通常,for 循环的语法如下所示:

for (初始操作;循环继续条件;每次迭代后的操作) {

// 循环体;

语句(组); }

流程图如下:

Java 双重校验锁 javaif双重判断_嵌套_17


下面的题应用到了while循环,我们具体来解一下这道几题:

Java 双重校验锁 javaif双重判断_嵌套_18

class Class13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入两个数:");//提示用户输入
        int a=scanner.nextInt();
        int b=scanner.nextInt();
        int gcd=1;
        for(int i=2;i<=(b<a?b:a);i++){
            if(a%i==0 && b%i==0){
                gcd=i;
            }
        } 
           System.out.println(gcd);
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_嵌套_19


Java 双重校验锁 javaif双重判断_嵌套_20

public static void main(String[] args){
        for(int i=1;i<=7;i++){
            for(int k=1;k<=7-i;k++){
                System.out.print("  ");
            }
            for(int j=-(i-1);j<=i-1;j++){
                System.out.print(Math.abs(j)+1+" ");
            }
            System.out.println();
        }
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_if语句_21


![](

public static void main(String[] args){
        double e=0;
        for(int i=0;i<=10000;i++){
            double multi=1;
            for(int j=1;j<=i;j++){
                multi*=j;
            }
            e+=1/multi;
        }
        System.out.println(e);
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_Java 双重校验锁_22


Java 双重校验锁 javaif双重判断_System_23

public static void main(String[] args){
        for(int i=1;i<=8;i++){
            for(int k=1;k<=8-i;k++){
                System.out.print("    ");
            }
            for(int j=-(i-1);j<=i-1;j++){
                System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(j)));
            }
            System.out.println();
        }
    }
}

运行结果为:

Java 双重校验锁 javaif双重判断_Java 双重校验锁_24