流程控制结构及equal和随机函数

123 阅读11分钟

在Java中有3种流程控制结构:顺序结构、选择结构、循环结构。

顺序结构

顺序结构是指程序从上向下依次执行每条语句的结构,中间没有任何的判断和跳转。

选择结构

选择结构是根据条件判断的结果来选择执行不同的代码。选择结构可以细分为单分支结构、双分支结构和多分支结构。Java提供了if控制语句和switch语句来实现选择结构。

if ; if…else
seitch

if

在Java当中,if语句属于选择结构,if语句又被称为分支语句/条件控制语句。

if语句的语法结构

if 语句的语法结构有四种编写方式:

第一种:
if(布尔表达式){
java语句;
java语句;
java语句;

}

第二种:
if(布尔表达式){
java语句;
java语句;

}else{
java语句;
java语句;

}

第三种:
if(布尔表达式){
java语句;
java语句;

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

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

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

}…

第四种:
if(布尔表达式){
java语句;
java语句;

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

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

}else {
java语句;
java语句;

}

重点:对于Java中的if语句来说,只要有一个分支执行,整个if语句全部结束。

注意: 1. 以上的第二种编写方式和第四种编写方式都带有else分支,这两种方式可以100%保证会有分支执行。

  1. 所有控制语句都是可以嵌套使用

例:要求输入一个三位数,判断该数是不是水仙花数。

package cn.bdqn.demo01;

import java.util.Scanner;

public class Demo01 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个三位数:");
        int num = sc.nextInt();
        int baiWei = num/100;
        int shiWei = num/10%10;
        int geWei = num%10;
        //System.out.println(Math.pow(3,2));控制台输出的是3^2结果为9
        if(Math.pow(baiWei, 3)+Math.pow(shiWei, 3)+Math.pow(geWei, 3)==num){
            System.out.println("您输入的是水仙花数!");
        }else{
            System.out.println("您输入的不是是水仙花数!");
        }
            
    }

}

多分支if选择结构(if-else-if选择结构)

执行规律:

1.先判断条件1,如果条件1为true,则执行代码块1,执行完代码块1之后,结束这个if-else-if结构,继续往下执行if-else-if结构之后的代码
2.如果条件1为false,继续往下判断条件2,如果条件2为true,执行代码块2,执行完代码块2之后,结束这个if-else-if结构,继续往下执行if-else-if结构之后的代码
3.如果条件2为false,继续往下判断条件3,…
4.如果所有的条件都为false,就执行else里面的代码块n,执行完代码块n后,结束这个if-else-if结构,继续往下执行if-else-if结构后面代码
注意事项:
1)所有的条件不管多么简单还是多么复杂,都只能是布尔值,要么为true,要么为false
2)else可以省略不写,如果所有的条件都不满足,也没有else,则整个if-else-if结构都不会执行
3)if-else-if结构中的条件,如果下面的条件会引用上面条件的潜在值,条件是有顺序,严格的条件在上面

例:需求:

  • 对学员的考试成绩评测

  • 成绩>=80 :良好

  • 成绩>=60 :中等

  • 成绩<60 :差

  • 使用多重if选择结构实现

    public static void main(String[] args) { /* * 需求: * 对学员的考试成绩评测 * 成绩>=80 :良好 * 成绩>=60 :中等 * 成绩<60 :差 * * 使用多重if选择结构实现 * */

        Scanner sc =new Scanner(System.in);
        
        System.out.println("请输入你的考试成绩:");
        double score = sc.nextDouble();
        
    

    // if(score>=80&&score<=100){ // System.out.println("良好"); // } //
    // if(score>=60&&score<80){ // System.out.println("中等"); // } //
    // if(score>=0&&score<60){ // System.out.println("差");
    // }

    // if(score>=80&&score<=100){ // System.out.println("良好"); // }else if(score>=60&&score<80){ // System.out.println("中等"); // }else{ // System.out.println("差");
    // }

        if(score>=80){
            System.out.println("良好");
        }else if(score>=60){
            System.out.println("中等");
        }else{
            System.out.println("差");    
        }
        
        System.out.println("继续努力.....");
    
    }
    

    }

练习题:根据天气(晴天/下雨)来决定是室内活动还是室外活动,根据温度来决定具体的活动:晴天30°以上,室内游泳,30°一下,室外篮球,雨天25°以上,室内游泳,雨天25°一下,在家敲代码

package cn.bdqn.demo01;

import java.util.Scanner;

public class LianXiTi {

    public static void main(String[] args) {
        /*
         * 练习:根据天气(晴天/下雨)来决定是室内活动还是室外活动,
         * 根据温度来决定具体的活动:晴天30°以上,室内游泳,30°一下,室外篮球,
         * 雨天25°以上,室内游泳,雨天25°一下,在家敲代码
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入当天天气:");
        String weather = sc.next();
        System.out.println("请输入当天气温:");
        double airTemperature = sc.nextDouble();
        boolean weatherToday = weather.equals("晴天");
        if(weatherToday)
        //晴天
        {
            if(airTemperature>30){                  //晴天30°以上
                System.out.println("室内游泳!");
            }else{                                  //晴天30°以下
                System.out.println("室外篮球!");
            }
        }
        //雨天
        else{
            if(airTemperature>25){                  //雨天25°以上
                System.out.println("室内游泳!");
            }else{                                  //雨天25°以下
                System.out.println("在家敲代码!");
            }
        }
    }
}

switch语句

语法格式:

switch(表达式){
case 常量 1:
语句;
break;
case 常量 2:
语句;
break;

default:
语句;
break;
}

switch、case、break、default是Java关键字

 -->JDK1.7后,switch后的表达式可以是intshortbytechar、枚举类型、String类型表达式。
 -->case用于与表达式进行匹配。
 -->break用于终止后续语句的执行。
 -->default是可选的,当其他条件都不匹配时执行default

执行规律:
1)计算switch后表达式的值。
2)将计算结果从上至下依次与case后的常量值比较。
3)如果相等就执行该常量后的代码块,遇到break语句就结束。
4)如果与任何一个case后的常量值都不匹配,就执行default中的语句。
注意事项:
1)如果case后没有break语句,程序将继续向下执行,直到遇到break语句或switch语句结束----“case穿透”。
2)case常量值不能相同。
3)default语句可以在任意位置书写,但一般写在switch结构的末尾。也可以省略不写。

练习:使用switch选择结构判断一个月份属于一年中的那个季节。(春夏秋冬)

package cn.bdqn.demo02;

import java.util.Scanner;

public class Subject17 {

    public static void main(String[] args) {
        /*
         * 使用switch选择结构判断一个月份属于一年中的那个季节。(春夏秋冬)
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入月份(1-12):");
        int month =sc.nextInt();
        
        switch(month){
        case 12:
//          System.out.println("冬季");
//          break;
        case 1:
//          System.out.println("冬季");
//          break;
        case 2:
            System.out.println("冬季");
            break;
        case 3:
//          System.out.println("春季");
//          break;
        case 4:
//          System.out.println("春季");
//          break;
        case 5:
            System.out.println("春季");
            break;
        case 6:
//          System.out.println("夏季");
//          break;
        case 7:
//          System.out.println("夏季");
//          break;
        case 8:
            System.out.println("夏季");
            break;
        case 9:
//          System.out.println("秋季");
//          break;
        case 10:
//          System.out.println("秋季");
//          break;
        case 11:
            System.out.println("秋季");
            break;
        }

    }

}

switch与多重if异同点

相同点:
都是用来处理多分支条件的结构
不同点:
switch选择结构只能处理等值条件判断的情况
多重if选择结构既能处理某个变量处于某个连续区间时的情况,也能处理等值条件判断的情况

循环结构

循环结构是根据判断条件来重复性地执行某段代码。Java提供了while语句、do-while语句、for语句来实现循环。JDK5.0新提供了增强for循环,可以更简单的方式来遍历数组和集合。

while
do…while
for

while循环

语法结构:
初始值;
while(循环条件){
循环操作代码块;
迭代部分;
}
例题:在控制台输出10遍好好学习,天天向上

package cn.bdqn.demo01;

public class Demo01 {

    public static void main(String[] args) {
        //在控制台输出10遍好好学习,天天向上
        //不使用循环来实现
        System.out.println("第1遍:好好学习,天天向上");
        System.out.println("第2遍:好好学习,天天向上");
        System.out.println("第3遍:好好学习,天天向上");
        System.out.println("第4遍:好好学习,天天向上");
        System.out.println("第5遍:好好学习,天天向上");
        System.out.println("第6遍:好好学习,天天向上");
        System.out.println("第7遍:好好学习,天天向上");
        System.out.println("第8遍:好好学习,天天向上");
        System.out.println("第9遍:好好学习,天天向上");
        System.out.println("第10遍:好好学习,天天向上");
        
        System.out.println("--------------------------------");
        
        //使用循环来实现
        int i =1;
        while(i<=100){
            System.out.println("第"+i+"遍:好好学习,天天向上");
            i++;
        }

    }

}

执行规律:
1)首先执行1次初始值代码
2)判断循环条件,如果循环条件为true,则执行{}里的循环操作代码块,并执行迭代部分,之后再次进行循环条件的判断,根据循环条件的结果决定是否再执行{}里的代码
如果循环条件为false,则结束整个while循环结构,继续往下执行while循环结构后面的代码
注意事项:
1)初始值只执行1次
2)循环条件不管多么简单还是多么复杂,都只能是布尔值,要么为true,要么为false
3)循环操作代码块可以是一行或者多行语句,
4)在循环结构中一定要有迭代部分来改变初始值,从而让循环条件再某个时候不再满足,结束循环操作,否则循环会进入死循环
5)如果循环条件在第一次判断的时候就不满足,那么循环操作一次都不会执行
Java中的循环控制语句有while循环、do-while循环和for循环等,循环结构的特点是在给定条件成立时,反复执行某程序段,直到条件不成立为止。

例题:使用while循环模拟打印50份试卷

package cn.bdqn.demo01;

public class Demo03 {

    public static void main(String[] args) {
        //使用while循环模拟打印50份试卷
        
        //初始值
        int i =1;
        while(i<=50){//循环条件
            System.out.println("打印第"+i+"份试卷");//循环操作
            ++i;//迭代部分
        }
        
        System.out.println("试卷打印完毕");

    }

}

do-while循环结构

语法结构:
初始值
do{
循环操作代码块;
迭代部分;
}while(循环条件);

例题:使用do-while循环输出100遍好好学习,天天向上

public static void main(String[] args) {
        //使用do-while循环输出100遍好好学习,天天向上
        
        //初始值
        int i =1;
        do{
            System.out.println("第"+i+"遍:好好学习,天天向上");//循环操作
            i++;//迭代部分
        }while(i<=100);//循环条件

        System.out.println("程序执行完毕");
    }

}

执行规律:
1)首先执行1次初始值
2)然后进入{}内执行循环操作和迭代部分
3)执行完1次{}里的代码后判断循环条件,如果循环条件为true,继续执行{}里的循环操作代码块和迭代部分,

如果循环条件为false,结束整个do-while循环结构,继续往下执行do-while循环结构后面的代码

注意事项:

初始值只执行1次
do-while循环是先执行1次循环操作,然后再去判断循环条件。因此如果第一次循环条件就不满足,循环操作也会执行一次
循环条件不管多么的简单还是复杂,都只能是布尔值,要么为true,要么为false

for循环

语法结构:
for(初始值;循环条件;迭代部分){
循环操作代码块
}

例题:使用for循环输出100遍好好学习,天天向上

public static void main(String[] args) {
        //使用for循环输出100遍好好学习,天天向上
        for(int i=1;i<=100;i++){
            System.out.println("第"+i+"遍:好好学习,天天向上");
        }

        System.out.println("程序执行完毕");
    }

}

执行规律:
1)首先执行1次初始值代码
2)判断循环条件,如果循环条件为true,则执行{}里的循环操作代码块,执行完循环操作代码后执行迭代部分,之后再次进行循环条件的判断,根据循环条件的结果决定是否再执行{}里的代码

如果循环条件为false,则结束整个for循环结构,继续往下执行for循环结构后面的代码

注意事项:

初始值只执行1次
循环条件不管多么简单还是多么复杂,都只能是布尔值,要么为true,要么为false
循环操作代码块可以是一行或者多行语句
在循环结构中一定要有迭代部分来改变初始值,从而让循环条件再某个时候不再满足,结束循环操作,否则循环会进入死循环
如果循环条件在第一次判断的时候就不满足,那么循环操作一次都不会执行
例题:输入一个值,然后根据这个值输出一下加法列表:

程序如下:

package cn.bdqn.demo03;

import java.util.Scanner;

public class Demo03 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入一个值:");
        int num =sc.nextInt();
        System.out.println("根据这个值可以输出以下加法表:");
        for(int i =0;i<=num;i++){
            System.out.println(i+"+"+(num-i)+"="+num);
        }
    }

}

循环主要由4个部分组成

初始部分:设置循环的初始状态。
循环体:重复执行的代码
循环条件:判断是否继续循环的条件。
迭代部份:改变循环条件的值。如果没有迭代部分,会出现死循环。

equals函数

比较两个字符串的内容是否相同
规则:字符串1.equals(字符串2);
这是用来比较字符串1和字符串2是否相同。

String str1 = "hello";
String str2 = "hello";

boolean result1 = str1.equals(str2);
System.out.println("str1和str2内容相同:"+result1);
boolean result2 = str1.equals("Hello");
System.out.println("str1和str2内容相同:"+result2);

运行结果:

随机函数

产生随机数(0.0~1.0)的方法:
模板:double num1 = Math.random();

Math.random()随机返回的是一个[0.0,1.0)的double类型的数据。
产生随机数(0~1)的方法:

package cn.bdqn.demo01;

public class randomHanShu {

    public static void main(String[] args) {
        int num1 = (int)(Math.random()*10);
        System.out.println(num1);

    }

}

随机结果如下:

每次随机的结果都是不一样的。
那么随机获取一个[19,31)之间的 int 型数据怎么办呢?

int num3=(int)(Math.random()*12+19);
System.out.println(num3);

解释:
012=0;112=12
0+19=19;12+19=31

  • 随机获取[num1,num2)之间的int型数据:

(int)(Math.random)*(num2-num1)+num1