java学习03 判断和循环

一 流程控制语句

1.流程控制语句分类

顺序结构

判断和选择结构(if, switch)

循环结构(for, while, do…while)

2. 顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

顺序结构执行流程图:

java学习03 判断和循环_第1张图片

package com.itheima.logicoperator;

public class LogicoperatorDemo2 {
    public static void main(String[] args) {
        int a=10;
        int b=10;
        boolean result = ++a <5 && ++b<5;
        System.out.println(result);
        System.out.println(a);
        System.out.println(b);
    }
}

java学习03 判断和循环_第2张图片

二 判断语句:if语句

1.格式1

if (关系表达式) {
    语句体;	
}

执行流程:

①首先计算关系表达式的值

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

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

④继续执行后面的语句内容

java学习03 判断和循环_第3张图片

练习

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

package com.itheima.ifdemo;

import java.util.Scanner;

public class ifDemo1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入女婿的酒量");
        int wine=sc.nextInt();
        if(wine>2){
            System.out.println("yes");
        }
    }
}

 java学习03 判断和循环_第4张图片

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

  2. 如果大括号中的语句体只有一条,那么大括号可以省略不写

    如果大括号省略了,那么if只能控制距离他最近的那一条语句。

java学习03 判断和循环_第5张图片

2.格式2

格式:
if (关系表达式) {
    语句体1;	
} else {
    语句体2;	
}

执行流程:

①首先计算关系表达式的值

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

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

④继续执行后面的语句内容

java学习03 判断和循环_第6张图片

练习

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

package com.itheima.ifdemo.test;

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入身上的钱");
        int money=sc.nextInt();
        if (money>=100){
            System.out.println("吃餐厅");
        }else{
            System.out.println("吃沙县");
        }
    }
}

 java学习03 判断和循环_第7张图片

需求:

在实际开发中,电影院选座也会使用到if判断。

假设某影院售卖了100张票,票的序号为1~100。

其中奇数票号坐左侧,偶数票号坐右侧。

键盘录入一个整数表示电影票的票号。

根据不同情况,给出不同的提示:

如果票号为奇数,那么打印坐左边。

如果票号为偶数,那么打印坐右边。

package com.itheima.ifdemo.test;

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入票号");
        int ticket=sc.nextInt();
        if(ticket>=0&&ticket<=100){  //校验票在0-100之间 
            if(ticket%2==1){
                System.out.println("做左边");
            }else{
                System.out.println("做右边");
            }
        }
    }
}

3.格式3

格式:
if (关系表达式1) {
    语句体1;	
} else if (关系表达式2) {
    语句体2;	
} 
…
else {
    语句体n+1;
}

执行流程:

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

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

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

④…

⑤如果没有任何关系表达式为true,就执行语句体n+1。

java学习03 判断和循环_第8张图片

练习

需求:

小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,

假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。

package com.itheima.ifdemo.test;

import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数成绩");
        int score=sc.nextInt();
        if(score>0&&score<=100){
            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("成绩不合法");
        }

    }
}

 java学习03 判断和循环_第9张图片

需求:
商场都会有VIP的会员制,根据不同的会员会有不同的折扣。
假设商品总价为1000.
键盘录入会员级别,并计算出实际支付的钱。
会员1级:打9折。
会员2级:打8折。
会员3级:打7折,
非会员:不打折,要打也是打骨折。

package com.itheima.ifdemo.test;

import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        int price=1000;
        Scanner sc=new Scanner(System.in);
        System.out.println("请录入会员级别");
        int vip=sc.nextInt();
        
        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);
        }
    }
}

 

三 switch语句

格式

switch (表达式) {
	case 1:
		语句体1;
		break;
	case 2:
		语句体2;
		break;
	...
	default:
		语句体n+1;
		break;
}
  • 首先计算出表达式的值

  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。

  • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

java学习03 判断和循环_第10张图片 

java学习03 判断和循环_第11张图片 

练习

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

    周一:跑步

    周二:游泳

    周三:慢走

    周四:动感单车

    周五:拳击

    周六:爬山

    周日:好好吃一顿

package com.itheima.ifdemo.test;

import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入星期");
        int week= sc.nextInt();
        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;
        }
    }
}

 java学习03 判断和循环_第12张图片

扩展知识

  • default的位置和省略情况

    default可以放在任意位置,也可以省略java学习03 判断和循环_第13张图片java学习03 判断和循环_第14张图片

  • case穿透

    不写break会引发case穿透现象

    package com.itheima.ifdemo.test;
    
    import java.util.Scanner;
    
    public class Test6 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入星期");
            int week = sc.nextInt();
            switch (week) {
                default:
                    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;
    
            }
        }
    }
    

    这里把break全注释了

  • java学习03 判断和循环_第15张图片

  • switch在JDK12的新特性java学习03 判断和循环_第16张图片

java学习03 判断和循环_第17张图片 

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

需要对一个范围进行判断的时候------》f的第三种格式

把有限个数据列举出来,选择其中一个执行------》switch语句

比如:

小明的考试成绩,如果用switch,那么需要写100个case,太麻烦了,所以用if简单。

如果是星期,月份,客服电话中0~9的功能选择就可以用switch

练习

需求:键盘录入星期数,输出工作日、休息日。

(1-5) 工作日,(6-7)休息日。

  l利用case穿透

package com.itheima.ifdemo.test;

import java.util.Scanner;

public class Test7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数表示星期");
        int week = sc.nextInt();
        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("error");
                break;

        }
    }
}

//这里利用case穿透

利用新特性

package com.itheima.ifdemo.test;

import java.util.Scanner;

public class Test7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数表示星期");
        int week = sc.nextInt();
        switch (week) {
            case 1,2,3,4,5 -> System.out.println("工作日");
            case 6,7 -> System.out.println("休息日");
            default -> System.out.println("没有这个星期");

        }
    }
}

java学习03 判断和循环_第18张图片

四 循环结构

1 for循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。

格式:

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

格式解释:

  • 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样

  • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去

  • 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情

  • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

执行流程:

①执行初始化语句

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

如果是false,循环结束

如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

java学习03 判断和循环_第19张图片

for循环书写技巧:

  • 确定循环的开始条件

  • 确定循环的结束条件

  • 确定循环要重复执行的代码

  练习

运行五次HelloWorld

package com.itheima.loopdemo;

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

java学习03 判断和循环_第20张图片

  • 需求:求1-5之间的数据和,并把求和结果在控制台输出

package com.itheima.test;

public class Test8 {
    public static void main(String[] args) {
        int sum=0;
        for (int i=1;i<=5;i++){
            sum=sum+i;  //sum +=i;
        }
        System.out.println(sum);
    }
}
  • 需求:求1-100之间的偶数和,并把求和结果在控制台输出 }

快捷键:100.fori

package com.itheima.test;

public class Test9 {
    public static void main(String[] args) {
        int sum=0;
        for (int i = 1; i <= 100; i++) {
            if(i%2==0){
                sum+=i;
            }
            
        }
        System.out.println(sum);
    }
}

 java学习03 判断和循环_第21张图片

需求:

键盘录入两个数字,表示一个范围。

统计这个范围中。

既能被3整除,又能被5整除数字有多少个?

package com.itheima.test;

import java.util.Scanner;

public class Test10 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个数");
        int start=sc.nextInt();
        System.out.println("请输入第二个数");
        int end=sc.nextInt();
        for (int i = start; i <= end; i++) {
            if(i%3==0&&i%5==0){
                System.out.println(i);
            }
            
        }
    }
}

 java学习03 判断和循环_第22张图片

统计个数

package com.itheima.test;

import java.util.Scanner;

public class Test10 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个数");
        int count=0;
        int start=sc.nextInt();
        System.out.println("请输入第二个数");
        int end=sc.nextInt();
        for (int i = start; i <= end; i++) {
            if(i%3==0&&i%5==0){
                count +=1;

            }
            
        }
        System.out.println(count);
    }
}

java学习03 判断和循环_第23张图片

2.while循环

格式:

初始化语句;
while(条件判断语句){
    循环体;
    条件控制语句;
}

java学习03 判断和循环_第24张图片

for 和 while 的区别:


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

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

2.for循环中:知道循环次数或者循环的范围
while循环:不知道循环的次数和范围,只知道循环的结束条件

练习

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

package com.itheima.test;

public class Test1 {
    public static void main(String[] args) {
        double height=8844430;
        double paper=0.1;
        int count =0;
        while(paper

 java学习03 判断和循环_第25张图片

回文数

需求:给你一个整数 x。
如果x是一个回文整数,打印 true,否则,返回 false。
解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

package com.itheima.test;

public class Test11 {
    public static void main(String[] args) {
        //1.定义数字
        int x=12345;
        //定义一个临时变量记录x原来的值
        int temp = x;
        //记录倒过来的值
        int num=0;
        while(x!=0){
            //从右往左获取每一位数字
            int ge=x%10;
            //修改x记录的值
            x=x/10;
            //把当前获取到的数字拼接到最右边
            num=num*10+ge;
        }
        System.out.println(num);
        System.out.println(x);
        System.out.println(num==temp);
    }
}

 java学习03 判断和循环_第26张图片

商和余数

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

java学习03 判断和循环_第27张图片 

package com.itheima.test;

public class Test12 {
    public static void main(String[] args) {
        int dividend=100;//被除数
        int divisor=10;//除数
        int sum=0;//次数 商
        while(dividend>=divisor){
            dividend=dividend-divisor;
            sum++;
        }
        System.out.println("余数为"+dividend);
        System.out.println("商为"+sum);
    }
}

java学习03 判断和循环_第28张图片

3.do...while循环

格式:

初始化语句;
do{
    循环体;
    条件控制语句;
}while(条件判断语句);

特点:

先执行,再判断。

java学习03 判断和循环_第29张图片

你可能感兴趣的:(学习)