Java基础知识10:判断和循环

发布于:2022-11-10 ⋅ 阅读:(412) ⋅ 点赞:(0)

流程控制语句:顺序结构、分支结构、循环结构

顺序结构

public class KV{
    public static void main(String[] args){
        System.out.println("a");
        System.out.println("b");
        System.out.println("c");
        System.out.println("d");
    }
}

分支结构:判断if和选择switch

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

  • if语句:用于对范围的判断
  • switch语句:用于把有限个数据一一列举出来,让我们任选其一

if语句

  • 如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号里
//格式1
public class KV{
    public static void main(String[] args){
        if(关系表达式){
            语句体1;
        }else{
            语句体2;
        }
    }
}


//格式2
public class KV{
    public static void main(String[] args){
        if(关系表达式1){
            语句体1;
        }else if(关系表达式2){
            语句体2;
        }
        
        ...

        else{
            语句体n+1;
        }
    }
}

 格式1练习:影院选座

假设某影院卖了100张票,序号为1~100,奇数坐在左边,偶数坐在右边

import java.util.Scanner;
public class KV{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的票号");
        int ticket = sc.nextInt();
        if(ticket>=1&&ticket<=100){
            if((ticket%2)==1){
                System.out.println("请您坐在左边");
            }else{
                System.out.println("请您坐在右边");
            }
        }else{
            System.out.println("您输入的票号无效");
        }
    }
}

格式2练习:商品价格

某商场由VIP会员制,根据不同的会员会有不同的折扣

假设商品总价为1000,键盘录入会员级别,并计算出实际支付的钱

会员1级:打9折

会员2级:打8折

会员3级:打7折

非会员:不打折

import java.util.Scanner;
public class KV{
    public static void main(String[] args){
        int price = 1000;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的会员级别");
        int level = sc.nextInt();
        if(level>=1){
            if(level==1){
                System.out.println("实际支付的金额为"+(price*0.9));
            }else if(level==2){
                System.out.println("实际支付的金额为"+(price*0.8));
            }else if(level==3){
                System.out.println("实际支付的金额为"+(price*0.7));
            }
        }else{
        System.out.println("实际支付的金额为"+price);
        }
    }
}

switch语句

格式说明:

  • 表达式:(将要匹配的值)取值为byte、short、int、char。 JDK5以后可以是枚举,JDK7以后可以是String。
  • case: 后面跟的是要和表达式进行比较的值(被匹配的值)
  • break:表示终端,结束的意思,用来结束switch语句。
  • default:表示所有情况都不匹配时,就执行该处的内容,和if语句的else相似。
  • case后面是值只能是字面量,不能是变量
  • case给出的值不允许重复
  • default的位置:任意位置,习惯最下面
public class KV{
    public static void main(String[] args){
        switch(表达式){
            case 值1:
            语句体1;
            break;

            case 值2:
            语句体2;
            break;

            ...

            default:
            语句体n+1;
            break;
        }
    }
}

示例:

public class KV{
    public static void main(String[] args){
        String noodles = "兰州拉面";
        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;
        }
    }
}

switch新特性:用->代替break(JDK12)

public class KV{
    public static void main(String[] args){
        String noodles = "兰州拉面";
        switch(noodles){
            case "兰州拉面" -> System.out.println("吃兰州拉面");
            case "武汉热干面"-> System.out.println("吃武汉热干面");
            case "北京炸酱面"-> System.out.println("吃北京炸酱面");
            case "陕西油泼面"-> System.out.println("吃陕西油泼面");
            default -> System.out.println("吃泡面");
        }
    }
}

case穿透:省略break会导致后面所有case都打印出来直至遇到break或者右大括号

应用场景:如果多个case的语句体重复了,那么我们可以考虑使用case穿透去简化代码

练习:休息日和工作日

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

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

import java.util.Scanner;
public class KV{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入当前星期数");
        String day = sc.nextLine();
        switch(day){
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            System.out.println("Weekday");
            break;
            case "6":
            case "7":
            System.out.println("Weekend");
            break;
            default:
            System.out.println("没有这天");
            break;
        }
    }
}

 循环结构

  • for
  • while
  • do...while

for和while循环

  • 相同点:运行规则一样
  • 区别:
    •  for循环中,控制循环的变量,因为是归属于for循环的语法结构,在for循环结束后,就不能再次被访问了。(知道循环次数或者循环范围i的时候使用)
    • while循环中,控制循环的变量,对于while循环来说不归属于其语法结构中,在while循环结束后,该变量还可以继续使用。(不知道循环的次数和范围,只知道循环的结果条件)
    • 可以通过空格的方式使两者达到一样的效果
      //for循环
      int i = 0;
      for( ; i < 4; i++){
          System.out.println(i);
      }
      
      //while循环
      int i = 0;
      while( i < 4){
          i++;
      }
      System.out.println(i);

1.for循环

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

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

  • 累加思想

案例:求1~5的和

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

案例:求1~100之间的偶数和

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

  • 统计思想

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

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

统计这个范围中,既能被3整除,又能被5整除数字有多少个

public class KV{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("Please write the first number");
        int num1 = sc.nextInt();
        System.out.println("Please write the Second number");
        int num2 = sc.nextInt();

        int sum = 0;
        for(int i = num1;i<=num2;i++){
            if(i%3==0&&i%5==0){
                sum ++;
            }
        }
        System.out.println("The total is "+sum);
    }
}

2.while循环

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

案例:打印折纸的次数

需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。

请问,我折叠多少次,可以折叠成珠穆朗玛峰的厚度

public class KV{
    public static void main(String[] args){
        double h = 8844430;
        double h1 = 0.1;
        int cout = 0;
        while(h1<h){
            cout++;
            h1 *=2;
        } 
        System.out.println(cout);
    }
}

 案例:回文数

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

解释:回文数是指正序倒序读都一样的整数

初级写法:

import java.util.Scanner;
public class KV{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int ge = (X%10);
        int shi = (X/10%10);
        int bai = (X/100%10);
        int qian = (X/1000%10);
        int wan = (X/10000%10);
        int num = ge*10000+shi*1000+bai*100+qian*10+wan;
        System.out.println(num==X);
    }
}

 写法pro:

import java.util.Scanner;
public class KV{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int temp = X;
        int num = 0;
        while(X !=0){
            int ge = (X%10);
            X/=10;
            num = (num*10+ge);
        }
        System.out.println(num==temp);
    }
}

      

案例:求商和余数

需求:给定两个整数,被除数和除数(都是正数,且不超过int的范围)

将两数相除,要求不使用乘法,除法和%运算符。

得到商和余数。

import java.util.Scanner;
public class KV{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("被除数是:");
        int beichushu = sc.nextInt();
        System.out.println("除数是:");
        int chushu = sc.nextInt();
        int shang = 0;
        while((beichushu-chushu)>=0){
            beichushu-=chushu;
            shang++;
        }
        System.out.println("商是:"+shang);
        System.out.println("余数是:"+beichushu);
    }
}

3.do...while:先执行后判断

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


网站公告

今日签到

点亮在社区的每一天
去签到