Java基础教程——Java条件控制语句

举报
布小禅 发表于 2021/11/06 11:59:46 2021/11/06
【摘要】 Java基础教程——Java条件控制语句

七、分支控制语句

包含循环控制语句和条件控制语句

1. 循环控制语句

1. 自我提问

今天学到了个新知识,在学习一个东西前,先提出自己的一些问题,然后在学习,可能效率会高一点,那么就来提出一些问题吧

  1. 什么是循环控制语句?
  2. 他能干什么?
  3. 它有什么类型?

2. 回答问题

1. 什么是循环控制语句?

循环控制语句在于循环,能够让你在进行重复的操作时省时省力

2. 他能干什么?

举个例子:让你从1数到100,你数出来,会花费不短的时间,但是你让计算机数的话,计算机很快就能给你数出来,甚至可以说是瞬间
这个例子可能不太恰当,那么就来一个更加容易理解,也是学循环控制语句被玩烂的东西:1累加到100。让你手动算的话,要花费很多时间(不要跟我说什么你会数学,也能很快算出来,咱这边先不考虑,只是举个例子),但是让程序去用循环控制语句算的话就很快,也是瞬间。

3. 它有什么类型?

  1. for循环,由关键字for开头的
for(初始化;表达式;更新){
 代码块
}
  1. while循环,由while关键字开头的
while(表达式){
 代码块
}
  1. do…while循环,由do开头,中间由while衔接的
do{
 代码块
 }while(表达式);

3. 使用

通过例子,帮助理解

1.使用for循环实现1-100的累加

public class 循环 {
    public static void main(String[] args) {
        int num = 0;  //声明一个用来接收累加结果的变量
        for (int i = 0;i<=100;i++){
            num = num + i;
        }
        System.out.println(num);
    }
}

for循环直接在for后面跟初始体(int i = 0),限制条件(i<=100)和更新体(i++),中间需要用半角分号隔开,这是不可更改的 这个代码的意思是:初始化i是0,限制i的最大值是100,每次进行将num+i的值赋值给num循环后,让i+1。循环100次。结果是5050。

2.使用while循环实现1-100的累加

public class 循环 {
    public static void main(String[] args) {
        int num = 0;
        int i = 0;
        while (i<=100){
            num = num + i;
            i+=1;
        }
        System.out.println(num);

    }
}

while循环里面的初始体需要在循环外面定义,更新体在循环内部,限制条件在while后面的括号里。

3.使用do...while实现1-100的累加

public class 循环 {
    public static void main(String[] args) {
        int num = 0;
        int i = 0;
        do {
            num = num + i;
            i+=1;
        }while (i<=100);
        System.out.println(num);

    }
}

do...while循环,先执行do后面的代码块,再进行更新体的更新

4.嵌套循环

循环我们已经知道了,那么嵌套循环是什么? 嵌套循环就是循环里面还有循环,用前段时间的网络用语就是循环套娃,当然,嵌套循环在生活中也是非常的常见的,比如:你要围着操场跑三圈,,每一圈都要跑多少步。跑三圈就是一个大点的循环,那么你跑一圈要多少步就是多少个小循环。那么代码表示大概就是这样:

  1. 跑的第一圈
    • 迈左脚
    • 迈右脚
    • ......
  2. 跑的第两圈
    • 迈左脚
    • 迈右脚
    • ......
  3. 跑的第三圈
    • 迈左脚
    • 迈右脚
    • ......

1.嵌套循环代码展示

用代码将:跑三圈 ,每圈4步 表现出来

public class ForExample{
 public static void main(String[] args){
          for (int i = 1;i<=3;i++){
           System.out.println("第"+i+"圈");
              int j = 1;
              while (j<=4){
                  System.out.println("迈左脚");
                  System.out.println("迈右脚");
               j++;
            }
        }
  }
}

这个是for里面嵌套了一个while循环,外部循环一次,内部循环四次;意思就是按顺序循环,外面第一次循环,然后进入内部进行执行,进入内部又碰到循环,在里面需要把内部循环循环完成才能进行外部循环的第二次循环。这个代码循行的结果是:

/*
第1圈
迈左脚
迈右脚
(循环四次)
第2圈
迈左脚
迈右脚
(循环四次)
第3圈
迈左脚
迈右脚
(循环四次)
*/
//不展示那么多,免得说占字数

如果把这个理解了,那么可以尝试一下各种循环互相嵌套。

课后小练习

分别使用三个循环进行99乘法表的实现

2. 条件控制语句

条件控制语句用人的话来说就是,如果....就..... 这么一听的话,是不是就觉得很简单了,那么去看看他怎么在代码中显示吧,不过在此之前,我们先去复习一下循环控制语句的小练习吧。

1.最简单的if语句

我们会在这里说明最简单的if语句,帮助理解if语句。
if(条件){ 代码块 } 为什么说最简单呢,因为她只有一个if,没有别的了,意思就是,如果这个条件正确,就执行下面的代码块。如果错误,就跳过,条件的值必须是布尔值。比如:如果我十八岁了,我就可以去网吧上网。如果就是Java代码中的if,我是否十八岁是括号里面的条件,就可以去网吧上网是代码块。

int age = 18;
if (age>=18){
 System.out.println("可以去网吧上网");
}

是不是很简单,这个时候,我们可以这样做:

String text = "理解";
String me;
if (me == text){
 System.out.println("就这");
}

看懂的掌声,啪啪啪啪啪~~


2.if...else...语句

这次我们的if有了个跟班,名字叫做else,大家应该都学过英语,都知道是什么意思吧。没错,其他。
我们if...else...的格式是这样的:

if (条件表达式){
 代码块;
}else{
 代码块;
}

上面已经说过,条件的值是布尔类型的,只有两个值,true和false,那这个的意思就是,如果条件是true,那么就执行if下面的代码块,如果是false就执行else下面的代码块。
明天是周末,假如我们计划:如果明天不下雨,那么我就出去跑步,如果下雨,就在家里读书。那么用代码写出来,应该不是很难吧

String weather = "不下雨";
if (weather == "不下雨"){
 System.out.println("出去跑步");
 }else{
 System.out.println("在家读书");
}

3.if...else if...else... 语句

上面哪一种是只考虑了两种情况,但是有时候往往两种情况是不适用于我们的实际运用的,比如说成绩,60以下是不及格,60-80是及格,80-100是优秀,这就有了三种情况,用if...else...就不行了,而我们的if...else if...else 语句应运而生。
语句格式:

if(表达式){
 代码块;
}else if(表达式){
}else{
 代码块;
}


下面我们就对这个成绩进行划分

int score = 80;
if (score<60&&score>=0){
    System.out.println("不及格");
}else if (score>=60&&score<80){
    System.out.println("及格");
}else {
    System.out.println("优秀");
 }
}

当然,还能有更多的情况,更多的情况就是更多的else if

4.嵌套的条件控制语句

条件控制语句,我觉得就是限制住某个条件才能执行,而嵌套的if就是在限制了一个条件后,再进行一次限制。
比如我们上面的划分成绩的例子中,我么后在对60-80的同学进行限制的时候,是用了我们说过的逻辑运算符,与,这个我们也可以使用嵌套来做。
下面看看用代码显示吧。

int score = 81;
if (score>=60){
    if (score<80){
        System.out.println("及格");
     }
 }
}

当然这个只是最简单的,我们就用嵌套把3中的第一个限制条件也改了吧

int score = 1;
if (score<60){
    if (score>=0){
        System.out.println("不及格");
    }
}else if (score<80){
    if(score>=60){
        System.out.println("及格");
    }
}else {
    System.out.println("优秀");
}

switch语句的格式

学习语法嘛,要先看怎么用的,也就是,格式

switch(表达式){
    case 值 ://语句
       break; //可选
    case 值 ://语句
       break; //可选
    //你可以有任意数量的case语句
    default : //语句 //可选
}

嚯,这一看,不得了:这是什么玩意啊?

不慌,我们先看看怎么用的,就用猜拳游戏当例子吧

import java.util.Random;
//导入Random包,用于取随机数
import java.util.Scanner;
//导入Scanner包,用于从键盘获取数据
public class 猜拳 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  //只有sc是自定义的,别的地方都是固定语法
        Random ra = new Random();  //固定语法
        System.out.println("请输入你猜拳的数!规则如下:");
        System.out.println("0——————石头");
        System.out.println("1——————剪刀");
        System.out.println("2——————布");
        int a = sc.nextInt();  //用a从键盘接受一个整形类型的数据
        int pc = ra.nextInt(2);  //用pc变量接受一个从0 1 2 中随机取的数
        String guiZe = null;  //初始化变量
        String pc1 = null;   //初始化变量
        switch (a){
            case 0: guiZe = "石头";
                break;
            case 1: guiZe = "剪刀";
                break;
            case 2: guiZe = "布";
                break;
        }
        switch (pc){
            case 0: pc1 = "石头";
                break;
            case 1: pc1 = "剪刀";
                break;
            case 2: pc1 = "布";
                break;
        }
        if (pc == a){
            System.out.println("平局!");
            System.out.println("你出的是:"+guiZe);
            System.out.println("电脑出的是:"+pc1);
        }else if (pc >= a){
            System.out.println("你输了!");
            System.out.println("你出的是:"+guiZe);
            System.out.println("电脑出的是:"+pc1);
        }else {
            System.out.println("你赢了!");
            System.out.println("你出的是:"+guiZe);
            System.out.println("电脑出的是:"+pc1);
        }
    }
}

好,以上就是代码了,一眼看过去不会还是这样的感觉吧?(woc,这是什么鬼?)这都学到这里了,是时候该自己看代码了。——无良作者,什么时候学过Scanner和Random的,明明没有,掀桌 凸(艹皿艹 )

话外语

Random包,用于取随机数

Random ra = new Random();
ra.nextInt(2);

Scanner包,用于从键盘获取数据 用法:

Scanner sc = new Scanner(System.in);
sc.next类型();类型首字母必须大写

与switch语句再续前缘

好,话外语已经说完了,继续我们的switch,既然代码那么长,就是看switch的部分吧

switch (a){
    case 0: guiZe = "石头";
        break;
    case 1: guiZe = "剪刀";
        break;
    case 2: guiZe = "布";
        break;
    default: guiZe = "不符合规则";
}
switch (pc){
    case 0: pc1 = "石头";
        break;
    case 1: pc1 = "剪刀";
        break;
    case 2: pc1 = "布";
        break;
}

这个看着蛮复杂的,其实也算是个条件控制语句,我们先看第一个,其实只看第一个也就行了,开整,冲 如果a的值和case后面的值相等了,那么就执行冒号后面的代码,而如果没有相等的,就执行default后面的代码。好,我觉得我说的很详细了,就不多说了! 我觉得在这里插入图片描述

多一嘴

好吧,还是有必要多说几句的 表达式的值可以是:byte、short、int 、char、String,且case标签必须是字符串常量或字面量 好了,这次是真的没了!

彩蛋

本来是不想说的,但是看很多人都没发现,还是说一下,文中的猜拳小游戏有些逻辑上的错误哦,由于懒(确实是懒,不是理由哈哈),错误是什么我就不说了,自己找吧,就当锻炼一下自己,当程序员,找错是必不可少的技能,冲冲冲

课后小练习

判断一个数(由自己定义)是否是质数

什么是质数:只能被1和他本身整除的数就是质数。 例如:2、3、5、7、11、13…

课后小练习答案

1. for循环实现九九乘法表

首先先分析分析怎么做到,我们知道,循环是连续执行的,那么怎么让程序将九九乘法表展示给我们呢?我们先回顾一下九九乘法表长什么样子
在这里插入图片描述
回想一下我们的循环,再结合这张图,我们能想到什么呢?第一行,只有一个,第二行,两个,第三行,三个...... 我们可以用嵌套循环,外部循环表示纵的,内部循环表示横的,第一次循环,只输出1*1=1,只循环一次,第二行循环2次。。。做为限制条件,横的有9行,外部循环就以9为限制条件,那内部循环用什么呢,用纵列和行数的关系做为限制条件,就行了,代码如下

public class Te0 {

    public static void main(String[] args) {
        for (int i = 1;i<=9;i++){
            for (int j = 1;j<=i;j++){
                System.out.print(j+"*"+i+"="+(i*j)+" ");
                //这个地方注意要用print,这个函数的意思是输出完不换行
                //后面加空格是不让每个都连在一起
            }
            System.out.println(" ");
            //这句的作用是,每次循环结束后,换行
        }
    }
}

结果:

1*1=1  
1*2=2 2*2=4  
1*3=3 2*3=6 3*3=9  
1*4=4 2*4=8 3*4=12 4*4=16  
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25  
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36  
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49  
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64  
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

2.质数

先回顾一下题目:

判断一个数(由自己定义)是否是质数

什么是质数:只能被1和他本身整除的数就是质数。 例如:2、3、5、7、11、13…

想必对大家来说这个是很简单的吧!

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        boolean isPrime = true;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个正整数");
        int num = sc.nextInt();
        if (num > 0) {
            int k = (int) Math.sqrt(num);//k为num的正平方根,取整数 
            // 考虑平方根是为了减少重复量,开平方后面的数不处理
            /*
            素数是因子为1和本身, 如果数c不是素数,则还有其他因子,其中的因子
            假如为a,b.其中必有一个大于sqrt(c) , 一个小于sqrt(c) 
            所以m必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了
            */
            for (int i = 2; i <= k; i++) {
                if (num % i == 0) {
                    isPrime = false; //不是素数
                    break;
                }
            }
        }
        if (isPrime) {
            System.out.println(num + "是素数");
        } else {
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200