JavaSE学习历程记录

day04


学习内容:

一、流程控制语句

二、判断语句

三、Switch语句

四、循环结构

五、if代码练习

六、Switch选择语句

七、循环语句代码练习


一、流程控制语句

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。

 


1.1流程控制语句分类

​   顺序结构

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

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


1.2 顺序结构

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


二、判断语句

2.1 if语句( 格式一)

格式:

if (关系表达式) {

    语句体;    

}

执行流程:

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

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

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

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

                 

示例:

public class IfDemo {

    public static void main(String[] args) {

        System.out.println("开始");  

        //定义两个变量

        int a = 10;

        int b = 20;

        //需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b

        if(a == b) {

            System.out.println("a等于b");

        }      

        //需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c

        int c = 10;

        if(a == c) {

            System.out.println("a等于c");

        }      

        System.out.println("结束");

    }

}

 注意:

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

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

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

   **建议:**自己不要去写,如果别人这么写了,你要能看懂即可。


2.2 if语句( 格式二 )

格式:

if (关系表达式) {

    语句体1;  

} else {

    语句体2;  

}

执行流程:

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

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

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

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

示例:

public class IfDemo02 {
	public static void main(String[] args) {
		System.out.println("开始");		
		//定义两个变量
		int a = 10;
		int b = 20;
		//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
		if(a > b) {
			System.out.println("a的值大于b");
		} else {
			System.out.println("a的值不大于b");
		}		
		System.out.println("结束");
	}
}

2.3 if语句格式三

格式:

if (关系表达式1) {

    语句体1;  

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

    语句体2;  

}

else {

    语句体n+1;

}

执行流程:

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

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

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

④…

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


三、Switch语句

格式:

switch (表达式) {

    case 1:

      语句体1;

        break;

    case 2:

        语句体2;

        break;

    ...

    default:

        语句体n+1;

        break;

}

执行流程:

- 首先计算出表达式的值

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

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


3.1 Switch的扩展知识:

 default的位置和省略情况:

  default可以放在任意位置,也可以省略

case穿透:

  不写break会引发case穿透现象,

  switch在JDK12的新特性

例题:

休息日和工作日

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

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

case穿透示例:

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;
}

利用JDK12简化代码书写:

switch (week) {
    case 1, 2, 3, 4, 5 -> System.out.println("工作日");
    case 6, 7 -> System.out.println("休息日");
    default -> System.out.println("没有这个星期");
}

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

当我们需要对一个范围进行判断的时候,用if的第三种格式

当我们把有限个数据列举出来,选择其中一个执行的时候,用switch语句

比如:

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

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


四、循环结构

4.1 for循环结构

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

 for循环格式:

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

    循环体语句;                                                   

}                                                       

格式解释:

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

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

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

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

执行流程:

①执行初始化语句

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

​             如果是false,循环结束

​             如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

for循环书写技巧:

- 确定循环的开始条件

- 确定循环的结束条件

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

示例

//需求:打印5次HelloWorld

//开始条件:1

//结束条件:5

//重复代码:打印语句

for (int i = 1; i <= 5; i++) {

    System.out.println("HelloWorld");

}

4.2 while循环

格式:

初始化语句;

while(条件判断语句){

    循环体;

    条件控制语句;

}

示例:

厚度为0.1mm纸需要折叠多少下,和珠穆朗玛峰一样高。

//1.定义一个变量表示珠穆朗玛峰的高度
int height = 8844430;
//2.定义一个变量表示纸张的厚度
double paper = 0.1;

//定义一个计数器(变量),用来统计折叠的次数
int count = 0;

//3.循环折叠纸张
//只有纸张的厚度 < 穆朗玛峰的高度 循环才继续,否则循环就停止
//坑:只有判断为真,循环才会继续
while(paper < height){
    //折叠纸张
    paper = paper * 2;
    count++;
}

//4.打印一下纸张的厚度
System.out.println(count);//27

4.3 do...while循环

格式:

初始化语句;

do{

    循环体;

    条件控制语句;

}while(条件判断语句);

特点:

​   先执行,再判断。


4.4 三种格式的区别

  for和while循环,是先判断,再执行。

​   do...while是先执行,再判断。

​   当知道循环次数或者循环范围的时候,用for循环

​   当不知道循环次数,也不知道循环范围,但是知道循环的结束条件时,用while循环


五、if代码练习

5.1 李雷想买一个价值7988元的新手机,她的旧手机在二手市场能卖1500元,而手机专卖店推出以旧换新的优惠,把她的旧手机交给店家,新手机就能够打8折优惠。为了更省钱,李雷要不要以旧换新?请在控制台输出。

public class Work1 {
    public static void main(String[] args) {
        int NewPhone=7988;
        int SecondHand=1500;
        System.out.println("李雷要不要以旧换新:");
        if (NewPhone-SecondHand>NewPhone*0.8){
            System.out.println("要");
        }
        else {
            System.out.println("不需要");
        }

    }
}

5.2 让用户依次录入三个整数,求出三个数中的最小值,并打印到控制台。

      本题,也可以使用if嵌套的方式书写,但是非常麻烦,建议用三元运算符。

public class Work2 {
    public static void main(String[] args) {
        System.out.println("嵌套三元运算符的方法");
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int num1=sc.nextInt();
        System.out.println("请输入第二个整数:");
        int num2=sc.nextInt();
        System.out.println("请输入第三个整数:");
        int num3=sc.nextInt();
        int result=num1<num2?(num1<num3?num1:num3):(num2<num3?num2:num3);
        //int result=(num1 < num2) ? ((num1 < num3) ? num1 : num3) : ((num2 < num3) ? num2 : num3);
        System.out.println("最小数为:"+result);
        System.out.println("if else判断最小值的方法");
        //if else方法
        System.out.println("请输入数字一:");
        int a1=sc.nextInt();
        System.out.println("请输入数字二:");
        int a2=sc.nextInt();
        System.out.println("请输入数字三:");
        int a3=sc.nextInt();
        if (a1<a2){
             int renum=a1<a3?a1:a3;
            System.out.println("最小的数字是:"+renum);

        }
        else {int renum=a2<a3?a2:a3;
            System.out.println("最小的数字是"+renum);}

    }
}

5.3 

某银行推出了整存整取定期储蓄业务,其存期分为一年、两年、三年、五年,到期凭存单支取本息。存款年利率表如下:

​   存期      年利率(%)

​   一年      2.25

​   两年      2.7

​   三年      3.25

​   五年      3.6

请存入一定金额(1000起存),存一定年限(四选一),计算到期后得到的本息总额。

提示:

​   存入金额和存入年限均由键盘录入

​   本息计算方式:本金+本金×年利率×年限

public class Work3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入存入年限");
        int term = sc.nextInt();
        System.out.println("请输入存入金额");
        int money = sc.nextInt();
        if (money>=1000) {
            if (term == 1) {
                double total=money+money*0.0225*term;
                System.out.println("本息总额为:"+total);
            } else if (term==2) {
                double total=money+money*0.027*term;
                System.out.println("本息总额为:"+total);
            } else if (term==3) {
                double total=money+money*0.0325*term;
                System.out.println("本息总额为:"+total);
            }
            else if (term==4){
                double total=money+money*0.036*term;
                System.out.println("本息总额为:"+total);
            }
            else {
                System.out.println("年限过长,请选择其他更适合的服务");
            }


        }
        else {
            System.out.println("存入金额未达到标准");
        }
    }
}

5.4 某商场购物可以打折,具体规则如下:

​   普通顾客购不满100元不打折,满100元打9折;

​   会员购物不满200元打8折,满200元打7.5折;

​   不同打折规则不累加计算。

请根据此优惠计划进行购物结算,键盘录入顾客的类别(0表示普通顾客,1表示会员)和购物的折前金额(整数即可),输出应付金额(小数类型)。

public class Work4 {
    public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);
        System.out.println("请输入顾客类型");
        int client= sc.nextInt();
        System.out.println("请输入购物金额");
        int price= sc.nextInt();
        int normal=0;
        int vip=1;
        if(client==normal){
            if (price>=100){
                double money=price*0.9;
            }
            else {
                double money=price;
                System.out.println("最终金额为"+money);
            }
        } else if (client==vip) {
            if (price<200){
                double money=price*0.8;
                System.out.println("最终金额为"+money);
            }
            else if (price>=200) {
                double money=price*0.75;
                System.out.println("最终金额为"+money);

            }


        }
        else{
            System.out.println("走无购物通道");
        }

    }
}

5.5  2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除三险一金(三险一金数额假设是税前工资的10%)后如果不足5000元,则不交税。如果大于5000元,那么大于5000元的部分按梯度交税,具体梯度比例如下:

​   0 ~ 3000元的部分,交税3%        

​   3000 ~ 12000元的部分,交税10%

​   12000 ~ 25000的部分 , 交税20%        

​   25000 ~ 35000的部分,交税25%

​   35000 ~ 55000的部分,交税30%      

​   55000 ~ 80000的部分,交税35%

​   超过80000的部分,交税45%

请完成一个个税计算程序,在用户输入税前工资后,计算出他对应的纳税数额,以及税后工资为多少?

public class Work5 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入税前工资:");
        int salary= sc.nextInt();
        double insurance=salary*0.1;
        double BeforeTax=salary-insurance-5000;

        if (BeforeTax>5000){
            System.out.println("您需要交税");
            if(BeforeTax>0&&BeforeTax<3000){
                double money=BeforeTax*0.03;
                double FinalTax=salary-insurance-money;
                System.out.println("您的个税缴纳数为"+money);
                System.out.println("您的税后工资为"+FinalTax);

            }
            else if (BeforeTax>=3000&&BeforeTax<12000) {
                double money=3000*0.03+(BeforeTax-3000)*0.1;
                double FinalTax=salary-insurance-money;
                System.out.println("您的个税缴纳数为"+money);
                System.out.println("您的税后工资为"+FinalTax);
            } else if (BeforeTax>=12000&&BeforeTax<25000) {
                double money=3000*0.03+9000*0.1+(BeforeTax-12000)*0.2;
                double FinalTax=salary-insurance-money;
                System.out.println("您的个税缴纳数为"+money);
                System.out.println("您的税后工资为"+FinalTax);
            } else if (BeforeTax>=25000&&BeforeTax<35000) {
                double money=3000*0.03+9000*0.1+13000*0.2+(BeforeTax-25000)*0.25;
                double FinalTax=salary-insurance-money;
                System.out.println("您的个税缴纳数为"+money);
                System.out.println("您的税后工资为"+FinalTax);

            } else if (BeforeTax>=35000&&BeforeTax<55000) {
                double money=3000*0.03+9000*0.1+13000*0.2+10000*0.25+(BeforeTax-35000)*0.3;
                double FinalTax=salary-insurance-money;
                System.out.println("您的个税缴纳数为"+money);
                System.out.println("您的税后工资为"+FinalTax);
            } else if (BeforeTax>=55000&&BeforeTax<80000) {
                double money=3000*0.03+9000*0.1+13000*0.2+10000*0.25+20000*0.3+(BeforeTax-55000)*0.35;
                double FinalTax=salary-insurance-money;
                System.out.println("您的个税缴纳数为"+money);
                System.out.println("您的税后工资为"+FinalTax);

            } else if (BeforeTax>80000) {
                double money=3000*0.03+9000*0.1+13000*0.2+10000*0.25+20000*0.3+25000*0.35+(BeforeTax-55000)*0.4;
                double FinalTax=salary-insurance-money;
                System.out.println("您的个税缴纳数为"+money);
                System.out.println("您的税后工资为"+FinalTax);

            }
        }
        else {
            System.out.println("您尚不需要缴纳个人所得税。");
        }

    }
}

六、Switch选择语句

6.1 模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。

要求:

​   键盘录入三个整数,其中前两个整数代表参加运算的数据,第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算),演示效果如下:

​       请输入第一个整数: 30

​       请输入第二个整数: 40

​       请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法): 1

​       控制台输出:30+40=70

public class Work6 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int num1=sc.nextInt();
        System.out.println("请输入第二个整数:");
        int num2=sc.nextInt();
        System.out.println("请输入你要进行的运算:1表示加法 2表示减法 3表示乘法 4表示除法");
        int type=sc.nextInt();
        switch (type){
            case 1:{
                System.out.println(num1+"+"+num2+"="+(num1+num2));
                break;
            }
            case 2:{
                System.out.println(num1+"-"+num2+"="+(num1-num2));
                break;
            }
            case 3:{
                System.out.println(num1+"*"+num2+"="+(num1*num2));
                break;
            }
            case 4:{
                System.out.println(num1+"/"+num2+"="+(num1/num2));
                break;
            }
            default:
                System.out.println("您输入的运算类型有误");
        }
    }
}

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

  周一:跑步  

  周二:游泳  

  周三:慢走  

  周四:动感单车

  周五:拳击  

  周六:爬山  

  周日:好好吃一顿

public class SwitchDemo2 {
    public static void main(String[] args) {
        //1.键盘录入一个整数表示星期
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数表示星期");
        int week = sc.nextInt();

        //2.书写一个switch语句去跟week进行匹配
        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;
        }
    }
}

七、循环语句代码练习

7.1   键盘录入两个数字number1和number2表示一个范围,求这个范围之内的数字和。

public class Work7 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int num1=sc.nextInt();
        System.out.println("请输入第二个数字:");
        int num2=sc.nextInt();
        int start=num1<num2?num1:num2;
        int end=num1>num2?num1:num2;
        int sum=0;

    /*    for (循环变量赋初值; 循环条件; 循环变量增值) {
            语句;
        }*/
            for(int i=start;i<=end;i++){
                System.out.println(i);
                sum=sum+i;

            }
        System.out.println("最终结果为:"+sum);

        }




}

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

​           统计这个范围中。

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

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

            }
        }
        System.out.println("既能被3整除,又能被5整除的数字有"+count+"个");
    }
}

7.3  世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),

​   假如我有一张足够大的纸,它的厚度是0.1毫米。

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

public class Work9 {
    public static void main(String[] args) {
        int mountain=8844430;
        double paper=0.1;
        int count=0;
        for (double i=paper;i<=mountain;i=i*2){
            count++;
        }
        System.out.println("需要折叠"+count+"次");
    }
}

7.4   给你一个整数 x 。

​           如果 x 是一个回文整数,打印 true ,否则,返回 false 。

解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

public class Work10 {//回文数
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int num=sc.nextInt();
        int x=0;
        int temp=num;//临时变量 用于存储起始num变量的值
        while (num!=0){
            int ge=num%10;
            num=num/10;
            x=x*10+ge;

        }
        System.out.println(temp==x);
    }
}

7.5   给定两个整数,被除数dividend和除数divisor(都是正数,且不超过int的范围) 。

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

​      得到商和余数。

ublic class Work11 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入被除数:");
        int dividend=sc.nextInt();
        System.out.println("请输入除数:");
        int divisor=sc.nextInt();
        int count=0;
        int yu=0;
        while (dividend!=0){
            dividend=dividend-divisor;
            if (dividend >=0){
                count++;
            }

        }
        System.out.println("商为:"+count+"余数为"+dividend);
    }
}

7.6   已知2019年是猪年,请在控制台输出从1949年到2019年中所有是猪年的年份。

public class Work12 {
    public static void main(String[] args) {
//        int now=2019;
//        int before=1949;
        int pig=2019;

            for (pig=2019;pig>=1949;pig=pig-12)
            System.out.println(pig+"年是猪年");

        }
    }

7.7 中国有闰年的说法。闰年的规则是:四年一闰,百年不闰,四百年再闰。(年份能够被4整除但不能被100整除算是闰年,年份能被400整除也是闰年)。请打印出1988年到2019年的所有闰年年份。

public class Work13 {
    public static void main(String[] args) {
          for (int x=1988;x<=2019;x++){
              if (x%4==0&&x%100!=0){
                  System.out.println(x+"年是闰年");
              } else if (x%400==0) {
//                  可以换成 if ((x%4==0&&x%100!=0)||x%400==0)
                  System.out.println(x+"年是闰年");
              }
          }

        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值