[从0开始学Java|第四天]Java判断和循环

流程控制语句

学习方法转变

-前面的东西是概念,格式方面的内容(记忆 + 练习).

-从现在开始,后面需要思考的东西就多了(理解概念 + 分析题目的逻辑 + 多多练习).

什么是流程控制语句?

**流程控制语句:**通过一些语句,控制程序的执行流程.

顺序结构

顺序结构语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行

例:

(源代码)

java 复制代码
package com.itheima.orderdemo;

public class OrderDemo {
    public static void main(String[] args) {
        System.out.println("努力做主人喜欢的事");
        System.out.println("大小姐驾到!通通闪开!");
        System.out.println("凌冬已至,故乡的梅花开了吗");
        System.out.println("心怀不惧,方能翱翔于天际");
    }
}

(运行结果截图)

分支结构

为什么要有if语句呢?

if语句在程序中就是用来进行判断的.

if语句的第一种格式

格式:

if (关系表达式) {

语句体;

}


执行流程:

1.首先计算关系表达式的值

2.如果关系表达式的值为true就执行语句体

3.如果关系表达式的值为false就不执行语句体

4.继续执行后面的其他语句


if的注意事项:

1.大括号的开头可以另起一行书写,但是建议写在第一行的末尾(Java的习惯)

2.在语句体中,如果只有一行代码,大括号可以省略不写,但是建议不要省略

3.如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号即可

练习:老丈人选女婿

**需求:**键盘录入女婿酒量,如果大于2斤,老丈人给出回应,反之不回应

(源代码)

java 复制代码
package ifdemo;

import java.util.Scanner;

public class IfDemo1 {
    public static void main(String[] args) {
        //需求:键盘录入女婿酒量,如果大于2斤,老丈人给出回应,反之不回应

        //分析:
        //1.键盘录入女婿酒量
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入女婿酒量:");
        int wine = sc.nextInt();
        //2.对酒量进行判断
        if(wine > 2){
            System.out.println("小伙子,不错哟!");
        }
    }
}

(运行结果截图)

练习:考试奖励

需求:(小红:如果你这次考试全班第一,我就做你女朋友)

(源代码)

java 复制代码
package test;

public class Test1 {
    public static void main(String[] args) {
        //小红:如果你这次考试全班第一,我就做你女朋友

        //分析:
        //1.定义一个变量表示小明的名次
        int ranking = 1;
        //2.对小明的名次进行判断
        if(ranking == 1){
            System.out.println("小红成为了小明的女朋友");
        }
    }
}

(运行结果截图)

练习:自动驾驶

**需求:**汽车无人驾驶会涉及到大量的判断,当汽车行驶的时候遇到了红路灯,就会进行判断:如果红灯亮,就停止;如果黄灯亮,就减速;如果绿灯亮,就行驶.

(源代码)

java 复制代码
package test;

public class Test2 {
    public static void main(String[] args) {
        //汽车无人驾驶会涉及到大量的判断,
        //当汽车行驶的时候遇到了红路灯,就会进行判断:
        //如果红灯亮,就停止;如果黄灯亮,就减速;如果绿灯亮,就行驶.

        //分析:
        //1.定义三个变量表示灯的状态
        //true 亮 false 灭
        boolean isLightGreen = false;
        boolean isLightYellow = false;
        boolean isLightRed = true;

        //2.判断:如果红灯亮,就停止;如果黄灯亮,就减速;如果绿灯亮,就行驶.
        if(isLightGreen){
            System.out.println("绿灯亮,行驶");
        }
        if(isLightRed){
            System.out.println("红灯亮,停止");
        }
        if(isLightYellow){
            System.out.println("黄灯亮,减速");
        }
    }
}

(运行结果截图)

if语句的第二种格式

格式:

if (关系表达式 ) {

语句体1;

}else {

语句体2;

}


执行流程:

1.首先计算关系表达式的值

2.如果关系表达式的值为true就执行语句体1

3.如果关系表达式的值为false就执行语句体2

4.继续执行后面的其他语句

练习:吃饭

**需求:**键盘录入一个整数,表示身上的钱.如果大于等于100块,就是网红餐厅;否则,就吃经济实惠的沙县小吃.

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        /*键盘录入一个整数,表示身上的钱.
        如果大于等于100块,就是网红餐厅;否则,就吃经济实惠的沙县小吃.*/

        //分析:
        //1.键盘录入一个整数,表示身上的钱.
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入身上的钱:");
        int money = sc.nextInt();
        //2.对钱进行判断(二选一)
        if(money >= 100){
            System.out.println("网红餐厅");
        }else{
            System.out.println("沙县小吃");
        }
    }
}

(运行结果截图)

练习:商品付款

在实际开发中,如果要根据两种不同的情况来执行不同的代码,就需要使用到if的第二种格式.

**需求:**假设,用户在超市实际购买商品总价为:600元.键盘录入一个整数表示用户实际支付的钱.如果付款大于等于600,表示付款成功;否则付款失败.

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        /*假设,用户在超市实际购买商品总价为:600元.
        键盘录入一个整数表示用户实际支付的钱.如果付款大于等于600,表示付款成功;否则付款失败.*/

        //分析:
        //1.键盘录入一个整数表示用户实际支付的钱.
        Scanner sc = new Scanner(System.in);
        System.out.println("用户实际支付的钱:");
        int money = sc.nextInt();

        //2.对钱进行判断(二选一)
        if(money >= 600){
            System.out.println("付款成功");
        }else {
            System.out.println("付款失败");
        }
    }
}

(运行结果截图)

练习:影院选座

在实际开发中,电影院的选票也会用到if判断

**需求:**假设某影院售卖了100张票,票的序号为1~100.其中奇数票号坐左侧,偶数票号坐右侧.键盘录入一个整数表示电影票的序号.根据不同的情况,给出不同的提示:如果票号为奇数,那么打印坐左边;如果票号为偶数,那么打印坐右边.

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        /*假设某影院售卖了100张票,票的序号为1~100.其
        中奇数票号坐左侧,偶数票号坐右侧.键盘录入一个整数表示电影票的序号.
        根据不同的情况,给出不同的提示:
        如果票号为奇数,那么打印坐左边;如果票号为偶数,那么打印坐右边.*/

        //分析:
        //1.键盘录入一个整数表示电影票的票号.
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入电影票的票号:");
        int ticket = sc.nextInt();
        //只有当ticket在1~100之间才是合法的票号
        if (ticket >=1 && ticket <= 100) {
            //2.对票号进行判断(二选一)
            if (ticket % 2 == 1) {
                System.out.println("坐左边");
            } else {
                System.out.println("坐右边");
            }
        }
    }
}

(运行结果截图)

if语句的第三种格

格式:

if (关系表达式 ) {

语句体1;

}else if (关系表达式2) {

语句体2;

}

...

else {

语句体 n + 1;

}


执行流程:

1.首先计算关系表达式1的值

2.如果为true就执行语句体1;如果为false就计算关系表达式2的值

3.如果为true就执行语句体2;如果为false就计算关系表达式3的值

  1. ... ...

5.如果所有关系表达式的结果都为false,就执行语句体n+1.


注意事项:

从上往下依次进行判断

只要有一个判断为真,就执行对应的语句体

如果所有的判断都为假,就执行else的语句体

练习:小明的礼物

**需求:**根据不同的分数送不同的礼物:如果是95~100分,送自行车一辆;如果是90~94分,游乐场玩一天;如果是80~89分,送变形金刚一个;如果是80分以下,揍一顿

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        /*根据不同的分数送不同的礼物:
        如果是95~100分,送自行车一辆;
        如果是90~94分,游乐场玩一天;
        如果是80~89分,送变形金刚一个;
        如果是80分以下,揍一顿 */

        //分析:
        //1.键盘录入一个整数表示分数
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入分数:");
        int score = sc.nextInt();

        //对异常数据进行判断校验:0~100为合理数据
        if (score >= 0 && score <= 100) {
            //2.对分数进行判断(多选一)
            if (score >= 95 && score <= 100) {
                System.out.println("送自行车一辆");
            } else if (score >= 90 && score <= 94) {
                System.out.println("游乐场玩一天");
            } else if (score >= 80 && score <= 89) {
                System.out.println("送变形金刚一个");
            } else {
                System.out.println("揍一顿");
            }
        }else{
            System.out.println("当前录入的成绩不合法");
        }
    }
}

(运行结果截图)

练习:商品的价格

在实际开发中,多种情况判断时,会用到if的第三种格式

**需求:**商场都有VIP的会员制,根据不同的会员会有不同的折扣.假设商品总价为1000.键盘录入会员级别,并计算出实际支付的钱.

会员1级:打9折.

会员2级:打8折.

会员3级:打7折.

非会员:不打折.

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test7 {
    public static void main(String[] args) {
        /*商场都有VIP的会员制,根据不同的会员会有不同的折扣.
        假设商品总价为1000.
        键盘录入会员级别,并计算出实际支付的钱.
        会员1级:打9折.
        会员2级:打8折.
        会员3级:打7折.
        非会员:不打折.*/

        //分析:
        //1.定义变量记录总价
        int price = 1000;
        //2.键盘录入会员的级别
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入会员的级别:");
        int vip = sc.nextInt();
        //3.根据会员的级别计算出实际支付的钱
        if(vip == 1){
            System.out.println("实际支付的钱为:" + price * 0.9);
        }else if(vip == 2){
            System.out.println("实际支付的钱为:" + price * 0.8);
        }else if(vip == 3){
            System.out.println("实际支付的钱为:" + price * 0.7);
        }else{
            System.out.println("实际支付的钱为:" + price);
        }
    }
}

(运行结果截图)

练习:自动驾驶

**需求:**汽车无人驾驶会涉及到大量的判断,当汽车行驶的时候遇到了红路灯,就会进行判断:如果红灯亮,就停止;如果黄灯亮,就减速;如果绿灯亮,就行驶.

(源代码)

java 复制代码
package test;

public class Test8 {
    public static void main(String[] args) {
        //汽车无人驾驶会涉及到大量的判断,
        //当汽车行驶的时候遇到了红路灯,就会进行判断:
        //如果红灯亮,就停止;如果黄灯亮,就减速;如果绿灯亮,就行驶.

        //分析:
        //1.定义三个变量表示灯的状态
        //true 亮 false 灭
        boolean isLightGreen = false;
        boolean isLightYellow = false;
        boolean isLightRed = true;

        //2.判断:如果红灯亮,就停止;如果黄灯亮,就减速;如果绿灯亮,就行驶.
        if(isLightGreen){
            System.out.println("绿灯亮,行驶");
        }else if(isLightYellow){
            System.out.println("黄灯亮,减速");
        }else if(isLightRed){
            System.out.println("红灯亮,停止");
        }
    }
}

(运行结果截图)

switch语句格式

格式:

switch (表达式) {

case 值1:

语句体1;

break;

case 值2:

语句体2;

break;

...

default:

语句体n+1;

break;

}


执行流程:

1.首先计算表达式的值

2.依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束.

3.如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句


格式说明:

1.表达式: (将要匹配的值)取值为byte,short,int,char.JDK5以后可以是枚举,JDK7以后可以是String.

2.**case:**后面跟的是要和表达式进行比较的值(被匹配的值).

3.**break:**表示中断,结束的意思,用来结束switch语句.

4.**default:**表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似.

5.case后面的值只能是字面量,不能是变量.

6.case给出的值不允许重复

练习:吃面

**需求:**有以下几种面供选择,如果选择其他未提供的面,则默认选择方便面

(源代码)

java 复制代码
package switchdemo;

public class SwitchDemo1 {
    public static void main(String[] args) {
        //兰州拉面,武汉热干面,北京炸酱面,陕西油泼面

        //分析:
        //1.定义一个变量,表示选择的面
        String noodles = "兰州拉面";

        //2.使用switch语句,根据选择的面,输出对应的价格
        switch(noodles){
            case "兰州拉面":
                System.out.println("吃兰州拉面");
                break;
            case "武汉热干面":
                System.out.println("吃武汉热干面");
                break;
            case "北京炸酱面":
                System.out.println("吃北京炸酱面");
                break;
            case "陕西油泼面":
                System.out.println("吃陕西油泼面");
                break;
            default:
                System.out.println("吃方便面");
                break;
        }
    }
}

(运行结果截图)

练习:运动计划

**需求:**键盘录入星期数,显示今天的减肥活动

周一:跑步;周二:游泳;周三:慢走;周四:动感单车;周五:拳击;周六:爬山;周日:好好吃一顿

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test9 {
    public static void main(String[] args) {
        /*键盘录入星期数,显示今天的减肥活动
        周一:跑步;周二:游泳;周三:慢走;周四:动感单车;周五:拳击;周六:爬山;周日:好好吃一顿*/

        //分析:
        //1.键盘录入星期数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期数:");
        int week = sc.nextInt();
        //2.利用switch对星期进行匹配
        switch(week){
            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;
            default:
                System.out.println("输入有误");
                break;
        }
    }
}

(运行结果截图)

switch其他知识点

default的位置和省略

**1.位置:**default不一定是写在最下面的,我们可以写在任意位置.只不过习惯会写在最下面

(源代码)

java 复制代码
package switchdemo;
/*default的位置和省略
        1.位置:default不一定是写在最下面的,我们可以写在任意位置.只不过习惯会写在最下面
        2.省略:default可以省略,语法不会有问题,但是不建议省略*/
public class SwitchDemo2 {
    public static void main(String[] args) {
        int number = 100;
        switch (number){
            default:
                System.out.println("number的值不是1,10或者20");
                break;
            case 1:
                System.out.println("number的值为1");
                break;
            case 10:
                System.out.println("number的值为10");
                break;
            case 20:
                System.out.println("number的值为20");
                break;
        }
    }
}

(运行结果截图)

**2.省略:**default可以省略,语法不会有问题,但是不建议省略

(源代码)

java 复制代码
package switchdemo;
/*default的位置和省略
        1.位置:default不一定是写在最下面的,我们可以写在任意位置.只不过习惯会写在最下面
        2.省略:default可以省略,语法不会有问题,但是不建议省略*/
public class SwitchDemo2 {
    public static void main(String[] args) {
        int number = 100;
        switch (number){
            case 1:
                System.out.println("number的值为1");
                break;
            case 10:
                System.out.println("number的值为10");
                break;
            case 20:
                System.out.println("number的值为20");
                break;
            /*default:
                System.out.println("number的值不是1,10或者20");
                break;*/
        }
    }
}

(运行结果截图)

case穿透

什么是case穿透?

就是语句体中没有写break导致的.
执行流程:

首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配.

如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句.

如果没有发现break,那么程序会继续执行下一个case的语句体,一直遇到break或者右大括号为止.
使用场景:

如果多个case的语句体重复了,那么我们考虑利用case穿透去简化代码

(源代码)

java 复制代码
package switchdemo;
/*case穿透*/
public class SwitchDemo3 {
    public static void main(String[] args) {
        int number = 1;
        switch (number){
            case 1:
                System.out.println("number的值为1");
                //break;
            case 10:
                System.out.println("number的值为10");
                //break;
            case 20:
                System.out.println("number的值为20");
                //break;
            default:
                System.out.println("number的值不是1,10或者20");
                //break;
        }
    }
}

(运行结果截图)

switch新特性(JDK12之后)

(源代码)

java 复制代码
package switchdemo;
/*switch新特性(JDK12之后)*/
public class SwitchDemo4 {
    public static void main(String[] args) {
        //需求:键盘录入1 2 3 输出一 二三
        /*int number = 1;
        switch (number) {
            case 1:
                System.out.println("一");
                break;
            case 2:
                System.out.println("二");
                break;
            case 3:
                System.out.println("三");
                break;
            default:
                System.out.println("没有这种选项");
                break;
        }*/

        /*int number = 1;
        switch (number) {
            case 1 -> {
                System.out.println("一");
            }
            case 2 -> {
                System.out.println("二");
            }
            case 3 -> {
                System.out.println("三");
            }
            default -> {
                System.out.println("没有这种选项");
            }*/

        int number = 1;
        switch (number) {
            case 1 -> System.out.println("一");
            case 2 -> System.out.println("二");
            case 3 -> System.out.println("三");
            default -> System.out.println("没有这种选项");
        }
    }
}

(运行结果截图)

switch和if第三种格式各自的使用场景

switch的使用场景: 把有限个数据一一列举出来,让我们任选其一.

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test9 {
    public static void main(String[] args) {
        /*键盘录入星期数,显示今天的减肥活动
        周一:跑步;周二:游泳;周三:慢走;周四:动感单车;周五:拳击;周六:爬山;周日:好好吃一顿*/

        //分析:
        //1.键盘录入星期数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期数:");
        int week = sc.nextInt();
        //2.利用switch对星期进行匹配
        switch(week){
            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;
            default:
                System.out.println("输入有误");
                break;
        }
    }
}

(运行结果截图)

if第三种格式使用场景: 一般用于对范围的判断.

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        /*根据不同的分数送不同的礼物:
        如果是95~100分,送自行车一辆;
        如果是90~94分,游乐场玩一天;
        如果是80~89分,送变形金刚一个;
        如果是80分以下,揍一顿 */

        //分析:
        //1.键盘录入一个整数表示分数
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入分数:");
        int score = sc.nextInt();

        //对异常数据进行判断校验:0~100为合理数据
        if (score >= 0 && score <= 100) {
            //2.对分数进行判断(多选一)
            if (score >= 95 && score <= 100) {
                System.out.println("送自行车一辆");
            } else if (score >= 90 && score <= 94) {
                System.out.println("游乐场玩一天");
            } else if (score >= 80 && score <= 89) {
                System.out.println("送变形金刚一个");
            } else {
                System.out.println("揍一顿");
            }
        }else{
            System.out.println("当前录入的成绩不合法");
        }
    }
}

(运行结果截图)

练习:休息日和工作日

**需求:**键盘录入星期数,输出工作日,休息日.(1-5)工作日,(6-7)休息日

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test10 {
    public static void main(String[] args) {
        /*需求:键盘录入星期数,输出工作日,休息日.(1-5)工作日,(6-7)休息日*/

        //分析:
        //1.键盘录入星期数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入星期数:");
        int week = sc.nextInt();
        //2.利用switch语句来进行选择
        /*switch (week) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("您输入的星期数有误");
                break;
        }*/

        /*switch (week) {
            case 1, 2, 3, 4, 5:
                System.out.println("工作日");
                break;
            case 6, 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("您输入的星期数有误");
                break;
        }*/
        switch (week) {
            case 1,2,3,4,5 -> System.out.println("工作日");
            case 6,7 -> System.out.println("休息日");
            default -> System.out.println("您输入的星期数有误");
        }
    }
}

(运行结果截图)

练习:用户选择

**需求:**在实际开发中,如果我们需要在多种情况下选择其中一个,就可以用switch语句.

当我们拨打了某些服务电话时,一般会有按键选择.假设现在我们我打了一个机票预订电话,电话中语音提示:1.机票查询;2.机票预订;3.机票改签;4.退出服务;其他按键也是退出服务.请使用switch模拟该业务逻辑.

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test11 {
    public static void main(String[] args) {
        /*当我们拨打了某些服务电话时,一般会有按键选择.
        假设现在我们我打了一个机票预订电话,电话中语音提示:
        1.机票查询;2.机票预订;3.机票改签;4.退出服务;其他按键也是退出服务.
        请使用switch模拟该业务逻辑.*/

        //分析:
        //1.键盘录入一个证书表示我们的选择
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的选择:");
        int choose = sc.nextInt();
        //2.根据选择执行不同的代码
        switch (choose) {
            case 1 -> System.out.println("机票查询");
            case 2 -> System.out.println("机票预订");
            case 3 -> System.out.println("机票改签");
            case 4 -> System.out.println("退出服务");
            default -> System.out.println("退出服务");
        }
    }
}

(运行结果截图)

循环语句

什么是循环?

-重复地做某件事情

-具有明确的开始和停止标记

循环的分类

-for

-while

-do...while

for循环

格式:

for (初始化语句 ; 条件判断语句 ; 条件控制语句){

循环体语句;

}


执行流程:

1.执行初始化语句

2.执行条件判断语句,看其结果是true还是false

-如果是false,循环结束

-如果是true,执行循环体语句

3.执行条件控制语句

4.回到2继续执行条件判断语句


注意事项:

1.初始化语句只执行一次

2.判断语句为true,循环继续

3.判断结果为false,循环结束

基础案例1:输出HelloWorld

**需求:**打印5次HelloWorld

(源代码)

java 复制代码
package loopdemo;

public class ForDemo1 {
    public static void main(String[] args) {
        //打印5次HelloWorld
        for (int i = 1; i <= 5; i++) {
            System.out.println("HelloWorld");
        }
    }
}

(运行结果截图)

基础案例2:输出数字

**需求1:**打印 1 - 5

基础案例3:倒着输出数字

**需求2:**打印 5 - 1

(源代码)

java 复制代码
package test;

public class Test12 {
    public static void main(String[] args) {
        //需求1:打印 1 - 5
        for (int i = 1 ; i <= 5 ; i++){
            System.out.println(i);
        }
        //需求2:打印 5 - 1
        for (int i = 5 ; i >= 1 ; i--){
            System.out.println(i);
        }
    }
}

(运行结果截图)

基础案例4:断线重连

需求:

(源代码)

java 复制代码
package test;

public class Test13 {
    public static void main(String[] args) {
        for(int i = 1 ; i <= 5 ; i++){
            System.out.println("第"+ i + "次执行断线重连的业务逻辑");
        }
    }
}

(运行结果截图)

基础案例5:求和

**需求:**在实际开发中,如果获取一个范围中的每一个数据时,也会用到循环.比如:求1-5之间的和

(源代码)

java 复制代码
package test;

public class Test14 {
    public static void main(String[] args) {
        /*需求:在实际开发中,如果获取一个范围中的每一个数据时,也会用到循环.
        比如:求1-5之间的和*/

        //分析:
        //1.循环1-5得到里面的每一个数字
        int sum = 0;
        for (int i = 1 ; i <= 5 ; i++){
            //可以把得到的每一个数字累加到变量sum当中
            sum += i;
        }
        //当循环结束之后,表示已经把1-5之间的每一个数字都获取到了,并且都累加到了变量sum当中
        System.out.println(sum);
    }
}

(运行结果截图)

注意:

-求和的变量不能定义在循环的里面,因为变量只在所属的大括号中才有效

-如果我们把变量定义在循环的里面,那么当前变量只能在本次循环中有效.当本次循环结束之后,变量就会从内存中消失.第二次循环开始的时候,又会重新定义一个新的变量.

基础案例6:求和

**需求:**在实际开发中,如果要获取一个范围中的每一个数据时,会用到循环.但是此时,大多情况下,不会获取所有的数据,而是获取其中符合要求的数据.此时就需要循环和其他语句结合使用了.

比如:求 1 - 100 之间的偶数和

(源代码)

java 复制代码
package test;

public class Test15 {
    public static void main(String[] args) {
        /*需求:在实际开发中,如果要获取一个范围中的每一个数据时,会用到循环.
        但是此时,大多情况下,不会获取所有的数据,而是获取其中符合要求的数据.
        此时就需要循环和其他语句结合使用了.比如:求 1 - 100 之间的偶数和*/

        //分析:
        //1.循环1-100得到里面的每一个数字
        int sum = 0;
        for(int i = 1 ; i <= 100 ; i++){
            //2.累加求和(先判断,再求和
            if(i % 2 == 0){
                sum += i;
            }
        }
        //3.打印sum
        System.out.println(sum);
    }
}

(运行结果截图)

基础案例7:统计满足条件的数字

**需求:**键盘录入两个数字,表示一个范围.统计这个范围中既能被3整除,又能被5整除的数字有多少个?

(源代码)

java 复制代码
package test;

import java.util.Scanner;

public class Test16 {
    public static void main(String[] args) {
        /*需求:键盘录入两个数字,表示一个范围.
        统计这个范围中既能被3整除,又能被5整除的数字有多少个?*/

        //分析:
        //1.键盘录入两个数字
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入一个数字表示范围的开始:");
        int start = sc.nextInt();
        System.out.println("请录入一个数字表示范围的结束:");
        int end = sc.nextInt();

        //统计变量:统计符合要求的数字的个数
        int count = 0;

        //2.利用循环获取这个范围中的每一个数字
        for (int i = start ; i <= end ; i++){
            //3.对每一个数字进行判断,统计有多少个满足要求的数字
            if (i % 3 == 0 && i % 5 == 0){
                //System.out.println(i);
                count++;
            }
        }
        System.out.println(count);
    }
}

(运行结果截图)

while循环

格式:

初始化语句;

while (条件判断语句){

循环体语句;

条件控制语句;

}


执行流程:

1.执行初始化语句

2.执行条件判断语句,看其结果是true还是false

-如果是false,循环结束

-如果是true,执行循环体语句

3.执行条件控制语句

4.回到2继续执行条件判断语句


注意事项:

1.初始化语句只执行一次

2.判断语句为true,循环继续

3.判断结果为false,循环结束

练习:输出数字

**需求:**利用switch循环打印1 ~ 100

(源代码)

java 复制代码
package whiledemo;

public class WhileDemo1 {
    public static void main(String[] args) {
        //需求:利用switch循环打印1 ~ 100
        //分析:
        //开始条件:1
        //结束条件:100

        int i = 1;
        while (i <= 100) {
            System.out.println(i);
            i++;
        }
    }
}

(运行结果截图)

for和while的对比

**相同点:**运行规则都是一样的

for和while的区别

-for循环中,控制循环的变量,因为归属for循环的语法中,在for循环结束后,就不能再次被访问到了

-while循环中,控制循环的变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

for和while的区别:

-for循环中:知到循环次数或者循环的范围

-while循环:不知道循环的次数和范围,只知道循环的结束条件

基础案例1:打印折纸的次数

**需求:**世界最高的山峰是珠穆朗玛峰(8844.43米=884430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米.请问:我折叠多少次,可以折成珠穆朗玛峰的高度.

(源代码)

java 复制代码
package test;

public class Test17 {
    public static void main(String[] args) {
        /*需求:世界最高的山峰是珠穆朗玛峰(8844.43米=884430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米.
        请问:我折叠多少次,可以折成珠穆朗玛峰的高度.*/

        //分析:
        //1.定义一个变量用来记录山峰的高度
        double height =8844430;
        //2.定义一个变量用来记录纸张的初始厚度
        double paper = 0.1;
        //3.定义一个变量用来统计次数
        int count = 0;
        //4.循环折叠纸张,只要纸张的厚度小于山峰的高度,那么循环继续
        //每折叠一次,循环次数就要++
        //选择while循环理由:此时我们不知道循环的次数也不知道循环的范围,只知道循环的结果,所以用while
        while (paper <= height){
            //折叠纸张
            paper = paper * 2;
            //这第一次,++一次
            count++;
        }
        //5.循环结束后,打印次数
        System.out.println("折叠次数为:" + count);
    }
}

(运行结果截图)

基本案例2:回文数

**需求:**给你一个整数x.如果x是一个回文整数,打印true,否则,返回false.

**解释:**回文数是指正序(从左到右)和倒序(从右到左)读都是一样的整数.例如:121是回文数;而123不是.

(源代码)

java 复制代码
package test;

public class Test18 {
    public static void main(String[] args) {
        /*需求:给你一个整数x.如果x是一个回文整数,打印true,否则,返回false.
        解释:回文数是指正序(从左到右)和倒序(从右到左)读都是一样的整数.
        例如:121是回文数;而123不是.*/

        //核心思路:把数字倒过来跟原来的数字进行比较
        //1.定义数字
        int x = 12345;
        //定义一个临时变量用于记录x的值,用于最后进行比较
        int temp = x;
        //定义一个变量用于记录倒过来的数字
        int num = 0;
        //2.利用循环开始从右往左获取每一位数字
        while(x != 0){
            //从右往左获取每一位数字
            int ge = x % 10;
            //修改一下x记录的值
            x = x / 10;
            //把当前获取到的数字拼接到最右边
            num = num * 10 + ge;
        }
        //3.打印num
        System.out.println(num);
        //4.比较
        System.out.println(num == temp);
    }
}

(运行结果截图)

基本案例3:求商和余数

**需求:**给定两个整数,被除数和除数(都是正数,且不超过int的范围).将两数相除,要求不使用乘法,除法和%运算符,得到商和余数.

(源代码)

java 复制代码
package test;

public class Test19 {
    public static void main(String[] args) {
        /*需求:给定两个整数,被除数和除数(都是正数,且不超过int的范围).
        将两数相除,要求不使用乘法,除法和%运算符,得到商和余数.*/

        //核心思路:利用循环,每次减去除数,直到被除数小于除数为止
        //1.定义变量用于记录被除数
        int dividend = 10;
        //2.定义变量用于记录除数
        int divisor = 3;
        //3.定义一个变量用来统计相减的次数
        int count = 0;
        //4.循环 while
        //在循环中,不断地用 被除数 - 除数
        //只要被除数是大于等于除数的,那么就一直循环
        while(dividend >= divisor){
            //每次循环,都让被除数 - 除数
            dividend = dividend - divisor;
            //只要减一次,那么统计变量就自增一次
            count++;
        }
        //当循环结束后dividend变量记录的就是余数
        System.out.println("余数为:" + dividend);
        //当循环结束后,count变量记录的就是商
        System.out.println("商为:" + count);
    }
}

(运行结果截图)

do...while循环

格式:

初始化语句;

do {

循环体语句;

条件控制语句;

} while (条件判断语句);


执行流程:

1.执行初始化语句

2.执行循环体语句

3.执行条件控制语句

4.执行条件判断语句

-如果为true,返回2重复执行

-如果为false,结束循环

5.执行其他语句


注意事项:

先执行后判断

相关推荐
木辰風4 小时前
PLSQL自定义自动替换(AutoReplace)
java·数据库·sql
2501_944525544 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
heartbeat..4 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
5 小时前
java关于内部类
java·开发语言
好好沉淀5 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
gusijin5 小时前
解决idea启动报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
To Be Clean Coder5 小时前
【Spring源码】createBean如何寻找构造器(二)——单参数构造器的场景
java·后端·spring
lsx2024065 小时前
FastAPI 交互式 API 文档
开发语言
吨~吨~吨~5 小时前
解决 IntelliJ IDEA 运行时“命令行过长”问题:使用 JAR
java·ide·intellij-idea
你才是臭弟弟5 小时前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端