Java学习笔记2024/1/31

一、if判断语句作业

题目1

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

训练提示

  1. 用什么知识点能够对不同购买方式的价格做判断?

解题方案

  1. 使用if...else语句判断

操作步骤

  1. 计算不使用以旧换新时的花费。

  2. 计算使用以旧换新时的花费。

  3. 使用if..else语句判断哪种方式更省钱,并输出结果

答案

package test;
​
public class test1 {
    public static void main(String[] args) {
        // 李雷想买一个价值7988元的新手机,
        // 她的旧手机在二手市场能卖1500元,
        // 而手机专卖店推出以旧换新的优惠,
        // 把她的旧手机交给店家,新手机就能够打8折优惠。
        // 为了更省钱,李雷要不要以旧换新?请在控制台输出。
​
        // if
​
        // 分析:
        // 1.7988-1500
        // 2.7988*0.8
        // 3.比谁便宜
​
        int price = 7988;
        int a = price - 1500;
        double b = price * 0.8;
        System.out.println("第一种方式花费:" + a);
        System.out.println("第一种方式花费:" + b);
​
        if (b < a){
            System.out.println("第二种方式更省钱,要以旧换新");
        }
​
        System.out.println("^^");
    }
}

题目2

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

训练提示

  1. 如何完成用户录入?

  2. 求最小值需要用到什么知识点?

解题方案

  1. 使用Scanner键盘录入三个数字,使用三元运算符实现

  2. 使用Scanner键盘录入三个数字,使用if..else的嵌套实现(不做要求)

操作步骤

  1. 使用三次键盘录入的方法让用户输入三个整数

  2. 使用三元运算符求出最小值

  3. 打印输出最小值

备注:

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

可以自己试着写一下if嵌套方式,然后跟三元运算符方式进行对比一下,看看谁更简单。

答案

package test;
​
import java.util.Scanner;
​
public class test2 {
    public static void main(String[] args) {
        // 让用户依次录入三个整数,求出三个数中的最小值,并打印到控制台。
​
        // 分析:
        // 1.键盘录入三个整数
        // 2.求出三个数中的最小值
        // 3.前两个相比,设置一个临时变量,再和第三个相比
​
//        // 第一种方案:
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("键盘录入三个整数");
//        int a = scanner.nextInt();
//        int b = scanner.nextInt();
//        int c = scanner.nextInt();
//        int temp;
//        if (a 
  

题目3(一般难度)

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

存期 年利率(%)

一年 2.25

两年 2.7

三年 3.25

五年 3.6

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

提示:

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

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

训练提示

  1. 使用什么方式让用户输入内容?

  2. 使用哪种if语句的格式对信息作出判断?

解题方案

  1. 使用Scanner和if..else...的嵌套操作。

操作步骤

  1. 键盘录入金额和年份。

  2. 使用多条件if...else判断年份,计算本息金额。

  3. 输出结果。

答案

package test;
​
import java.util.Scanner;
​
public class test3 {
    public static void main(String[] args) {
        // 某银行推出了整存整取定期储蓄业务,
        // 其存期分为一年、两年、三年、五年,到期凭存单支取本息。
        // 存款年利率表如下:
        //
        //存期        年利率(%)
        //
        //一年        2.25
        //
        //两年        2.7
        //
        //三年        3.25
        //
        //五年        3.6
        //
        //请存入一定金额(1000起存),存一定年限(四选一),计算到期后得到的本息总额。
        //
        //提示:
        //
        //存入金额和存入年限均由键盘录入
        //
        //本息计算方式:本金+本金×年利率×年限
​
        // 分析:
        // 1.存入金额和存入年限均由键盘录入
        // 2.请存入一定金额(1000起存)
        // 3.存一定年限(四选一)
        // 4.计算到期后得到的本息总额 -> sum = money + money * lilv(直接写) * year
        Scanner scanner = new Scanner(System.in);
        System.out.println("请存入一定金额(1000起存)");
        int money = scanner.nextInt();
        double sum = 0;
        if (money >= 1000){
​
            System.out.println("存一定年限(四选一 -> 1235)");
            int year = scanner.nextInt();
            if (year == 1 || year == 2 || year == 3 || year == 5){
​
                if (year == 1){
                    sum = money + money * 0.0225 * year;
                } else if (year == 2){
                    sum = money + money * 0.027 * year;
                } else if (year == 3){
                    sum = money + money * 0.0325 * year;
                } else if (year == 5){
                    sum = money + money * 0.036 * year;
                }
​
            } else {
                System.out.println("请输入正确的年份(四选一->1235)");
            }
​
        } else {
            System.out.println("您输入的金额太低需要大于等于1000或是您输入了错误的数字");
        }
​
        //sum = money + money * lilv(直接写) * year
        System.out.println(sum);
​
        System.out.println("^^");
    }
}
// 有2个问题:
// 1.为什么一定要初始化变量 double sum=0; ,直接写 double sum; 不行吗?
// 2.我使用long定义money然后存1000000000000这么长的金额怎么还报错,是因为键盘录入不能使用long吗?不一定吧...
​
// 解决:
// 1.我认为的: =0是因为最后要打印输出使用变量,如果只是作为一个中间变量,到最后不使用的话就不用写=0,当然写也没有问题
​
// 随笔
// 应该从小到大,从里面往外面做的,这样条理更清晰

题目4(较难)

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

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

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

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

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

训练提示

  1. 使用什么方式让用户输入内容?

  2. 使用哪种if语句的格式对信息作出判断?

解题方案

  1. 使用Scanner键盘录入和if..else判断语句的嵌套使用来完成。

操作步骤

  1. 键盘录入会员类别和购物金额。

  2. 先使用if-else判断顾客类别。

  3. 在不同的顾客类别中再使用if-else语句判断购物金额。

  4. 输出结果。

答案

package test;
​
import java.util.Scanner;
​
public class test4 {
    public static void main(String[] args) {
        /*某商场购物可以打折,具体规则如下:
​
        普通顾客购不满100元不打折,满100元打9折;
​
        会员购物不满(<)200元打8折,满200元(>=)打7.5折;
​
        不同打折规则不累加计算。
​
        请根据此优惠计划进行购物结算,
        键盘录入顾客的类别(0表示普通顾客,1表示会员)和购物的折前金额(整数即可),
        输出应付金额(小数类型)。*/
​
        Scanner scanner = new Scanner(System.in);
        System.out.println("vip用户否? 1是0否");
        int vip = scanner.nextInt();
        double sum = 0;
​
            if (vip == 0 || vip == 1){
                System.out.println("购物的金额(整数即可)");
                int money = scanner.nextInt();
​
                if (money >= 0){
​
                    if (vip == 0){
                        //普通顾客购不满100元不打折,满100元打9折;
                        if (money < 100){
                            sum = money;
                        } else {
                            sum = money * 0.9;
                        }
​
                    } else {
                        //会员购物不满(<)200元打8折,满200元(>=)打7.5折;
                        if (money < 200){
                            sum = money * 0.8;
                        } else {
                            sum = money * 0.75;
                        }
​
                    }
​
                    System.out.println(sum);
​
                } else {
                    System.out.println("请输入正确的金额");;
                }
​
            } else {
                System.out.println("vip只有0和1两种,请输入正确数字");;
            }
​
        // 嵌套就是不断地将if else放在if里面,注意if else中的if里面是else if
        // 所以说嵌套就是else if放if else中的if里面,if else放if else中的if里面
​
        System.out.println("^^");
    }
}
​

题目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%

比如:黑马某学员入职一家企业后,税前工资是15000,则他每月该交个税的部分是15000-1500-5000=8500元,个税缴纳数额是3000×3%+5500×10%=640元。税后工资12860元。

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

训练提示

  1. 工资的哪些部分是属于要纳税部分,如何计算?

  2. 纳税比例有很多区间,用什么知识点能够对应多个区间?

  3. 每个区间的纳税数额是多少,计算的规律是什么?

解题方案

  1. 使用多条件的if...else对应各个纳税梯度,分别计算每一个梯度的纳税数额。

操作步骤

  1. 提示用户输入税前工资,使用键盘录入让用户输入一个整数。

  2. 计算工资中应交税部分。也就是去除三险一金和起征点数额。

  3. 使用多条件if..else..对每个区间分别判断,用每个梯度的计算公式求出对应的纳税数额。

  4. 根据求出的纳税数额求出税后工资。

答案

package test;
​
import java.util.Scanner;
​
public class test5 {
    public static void main(String[] args) {
        /*2019年1月1日起,国家推出新的个人所得税政策,
        起征点上调值5000元。
        也就是说税前工资扣除三险一金(三险一金数额假设是税前工资的10%)后如果不足5000元,//<5000
        则不交税。如果大于5000元,那么大于5000元的部分按梯度交税,具体梯度比例如下:
​
//0.0
写一个 大if else 语句
因为最最最外面还有一个判断条件
金额必须>=0
可以最后再来写
​
//1.0  范围: money0 < 5000
写一个 中if else 语句
就这一个最外面
接下来的都放在里面
可以最后第二步再来写
先写下面的,先写里面的
​
//1.1  范围: 0 =< money1 <= 3000 -> money1 >=0 && money1 <= 3000
•   0 ~ 3000元的部分,交税3%
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = money1 * 0.1 //改,最复杂的一步,要注意前面的税额用前面的计算
         money3[实发工资] = money0 - money2 //不改
​
//1.2案例是这个  范围: 3000 =< money1 <= 12000 -> money1 >=3000 && money1 <= 12000
•   3000 ~ 12000元的部分,交税10%
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = 3000*0.03 + (money1-3000)*0.1 //改,最复杂的一步,要注意前面的税额用前面的计算
         money3[实发工资] = money0 - money2 //不改
​
//1.3  范围: 12000 =< money1 <= 25000 -> money1 >=12000 && money1 <= 25000
•   12000 ~ 25000的部分 , 交税20%
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = 3000*0.03 + (12000-3000)*0.1 + (money1-12000)*0.2 //改,最复杂的一步,要注意前面的税额用前面的计算
         money3[实发工资] = money0 - money2 //不改
​
//1.4  范围:
•   25000 ~ 35000的部分,交税25%
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (money1-25000)*0.25 //改,最复杂的一步,要注意前面的税额用前面的计算
         money3[实发工资] = money0 - money2 //不改
​
//1.5
•   35000 ~ 55000的部分,交税30%
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (35000-25000)*0.25 + (money1-35000)*0.3 //改,最复杂的一步,要注意前面的税额用前面的计算
         money3[实发工资] = money0 - money2 //不改
​
//1.6
•   55000 ~ 80000的部分,交税35%
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (35000-25000)*0.25 + (55000-35000)*0.3 +(money-55000)*0.35 //改,最复杂的一步,要注意前面的税额用前面的计算
         money3[实发工资] = money0 - money2 //不改
​
//1.7
•   超过80000的部分,交税45%
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (35000-25000)*0.25 + (55000-35000)*0.3 +(80000-55000)*0.35 + (money1-80000)*0.45 //改,最复杂的一步,要注意前面的税额用前面的计算
         money3[实发工资] = money0 - money2 //不改
​
        //题目例子
        比如:黑马某学员入职一家企业后,
        税前工资是15000(money),则他每月该交个税的部分是(15000-1500)[money0->工资减三金]
        -5000[减多少看工资减三金后剩下多少,剩下的就是工资减三金money0<5000不用交税,
        >=5000就需要先减掉5000得到money1再看它处于哪个范围,money1所处的范围就是具体梯度的范围]
        =8500(money1->个税部分[假税])元,
        个税缴纳数额是3000×3%+5500×10%=640元(money2就是计算后得到的真税->个税再分,真正该交的税[真税])。税后工资12860元(money3[工资减三金减真税])。
         money0[工资减三金] = money - (money * 0.1) //不改
         money1[梯度的范围] = money0 - 5000 //不改,减后所处的范围
         money2[计算后得到的真税] = 3000*0.03 + (money1-3000)*0.1 //改,最复杂的一步
         money3[实发工资] = money0 - money2 //不改
​
        //题目要求
        请完成一个个税计算程序,
        在用户输入税前工资后,
        计算出他对应的纳税数额, // money2
        以及税后工资为多少?*/  // money3
​
        //先不用管什么>0的限制,先写已经知道的代码,再去解决延伸出来的问题
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入税前工资(整数)");
        int money = scanner.nextInt();
        double money0 = 0;
        double money1 = 0;
        double money2 = 0;
        double money3 = 0;
​
        //0.0
//        写一个 大if else 语句
//        因为最最最外面还有一个判断条件
//        金额必须>=0
//        可以最后再来写
        if (money >= 0){
​
            //1.0  范围: money0 < 5000
//        写一个 中if else 语句
//                就这一个最外面
//        接下来的都放在里面
//                可以最后第二步再来写
//        先写下面的,先写里面的
​
            money0 = money - (money * 0.1); //不改
​
            if (money0 >= 5000){
​
                money1 = money0 - 5000; //不改,这是相减后所处的范围
​
                if (money1 >=0 && money1 <= 3000){
                    //1.1  范围: 0 =< money1 <= 3000 -> money1 >=0 && money1 <= 3000
                    money2 = money1 * 0.1; //改,最复杂的一步,要注意前面的税额用前面的计算
                    money3 = money0 - money2; //不改
                } else if (money1 >=3000 && money1 <= 12000) {
                    //1.2案例是这个  范围: 3000 =< money1 <= 12000 -> money1 >=3000 && money1 <= 12000
                    money2 = 3000*0.03 + (money1-3000)*0.1; //改,最复杂的一步,要注意前面的税额用前面的计算
                    money3 = money0 - money2; //不改
                } else if (money1 >=12000 && money1 <= 25000) {
                    //1.3  范围: 12000 =< money1 <= 25000 -> money1 >=12000 && money1 <= 25000
                    money2 = 3000*0.03 + (12000-3000)*0.1 + (money1-12000)*0.2; //改,最复杂的一步,要注意前面的税额用前面的计算
                    money3 = money0 - money2; //不改
                } else if (money1 >=25000 && money1 <= 35000) {
                    //1.4  范围:
                    money2 = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (money1-25000)*0.25; //改,最复杂的一步,要注意前面的税额用前面的计算
                    money3 = money0 - money2; //不改
                } else if (money1 >=35000 && money1 <= 55000) {
                    //1.5
                    money2 = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (35000-25000)*0.25 + (money1-35000)*0.3; //改,最复杂的一步,要注意前面的税额用前面的计算
                    money3 = money0 - money2; //不改
                } else if (money1 >=55000 && money1 <= 80000) {
                    //1.6
                    money2 = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (35000-25000)*0.25 + (55000-35000)*0.3 +(money1-55000)*0.35; //改,最复杂的一步,要注意前面的税额用前面的计算
                    money3 = money0 - money2; //不改
                } else if (money1 >=80000) {
                    //1.7
                    money2 = 3000*0.03 +  (12000-3000)*0.1 + (25000-12000)*0.2 + (35000-25000)*0.25 + (55000-35000)*0.3 +(80000-55000)*0.35 + (money1-80000)*0.45; //改,最复杂的一步,要注意前面的税额用前面的计算
                    money3 = money0 - money2; //不改
                }
​
            } else {
​
                money0 = money - (money * 0.1);
                money3 = money0;
​
            }
​
        } else {
            System.out.println("输入错误");
        }
​
        System.out.println("对应的纳税数额为:" + money2);
        System.out.println("税后工资为" + money3);
​
        System.out.println("^^");
    }
}
//哇啊我真要去被窝里掉小珍珠了
//终于搞完了,咋这么复杂啊
//希望以后我能将这种题秒了不然我真吐了
​

二、switch选择语句作业

题目1

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

要求:

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

请输入第一个整数: 30

请输入第二个整数: 40

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

控制台输出:30+40=70

训练提示

  1. 用户录入了数据之后,用什么知识点去判断加减乘除四种不同的操作?

解题方案

  1. 使用switch判断语句完成。

操作步骤

  1. 使用键盘录入三个变量。

  2. 使用switch判断语句对第三个变量进行判断,匹配要执行的操作。

  3. 在每一个case中分别对第一个变量和第二个变量进行不同的操作。

答案

package test;
​
import java.util.Scanner;
​
public class test6 {
    public static void main(String[] args) {
        //模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。
        //
        //要求:
        //
        //• 键盘录入三个整数,其中前两个整数代表参加运算的数据,第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算),演示效果如下:
        //
        //•     请输入第一个整数: 30
        //
        //•     请输入第二个整数: 40
        //
        //•     请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法):)
        //
        //•     控制台输出:30+40=70
​
        //分析:
        //1.键盘录入的两个int类型的数据
        //2.加、减、乘、除的运算
        //3.键盘录入三个整数
        //4.其中前两个整数代表参加运算的数据
        //5.第三个整数为要进行的运算(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算)
​
        Scanner scanner = new Scanner(System.in);
        System.out.println("键盘录入两个整数");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = 0;
        System.out.println("请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法):");
        int yunSuan = scanner.nextInt();
        switch (yunSuan){
            case 1 -> c = a + b;
            case 2 -> c = a - b;
            case 3 -> c = a * b;
            case 4 -> c = a / b;
            default -> System.out.println("请输入正确的数字");
        }
​
        System.out.println(c);
​
        System.out.println("^^");
    }
}

三、循环语句作业

题目1

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

训练提示

  1. number1和number2不知道谁大谁小,需要先判断大小关系

  2. 确定大小之后,可以循环得到范围里面的每一个数

  3. 把每一个数字进行累加即可

答案

package test;
​
import java.util.Scanner;
​
public class test7 {
    public static void main(String[] args) {
        //键盘录入两个数字number1和number2表示一个范围,求这个范围之内的数字和。
​
        //分析:
        //1.键盘录入两个数字number1和number2表示一个范围
        //2.求这个范围之内的数字和 -> 说明要用到for循环语句而不是if判断语句
        Scanner scanner = new Scanner(System.in);
        //键盘录入两个数字number1和number2
        System.out.println("键盘录入两个数字number1和number2表示一个范围");
        int number1 = scanner.nextInt();
        int number2 = scanner.nextInt();
        int sum = 0;
        //一个范围
        for (int i = number1;i <= number2;i++){
            //求这个范围之内的数字和
            sum = sum + i;
        }
        System.out.println("这个范围之内的数字和为:" + sum);
        
        System.out.println("^^");
    }
}
​

题目2

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

统计这个范围中。

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

训练提示

  1. 需要先判断键盘录入两个数字的大小关系

  2. 确定大小之后,可以循环得到范围里面的每一个数

  3. 找到一个符合条件的数字,统计变量就自增一次

操作步骤

  1. 确定键盘录入的两个数字大小关系

  2. 定义for循环,找到范围之内的每一个数字

  3. 对每一个数字进行判断

  4. 符合条件统计变量自增一次

答案

package test;
​
import java.util.Scanner;
​
public class test8 {
    public static void main(String[] args) {
        /*键盘录入两个数字,表示一个范围。
​
•           统计这个范围中。
​
•       既能被3整除,又能被5整除数字有多少个?*/ // -> i/3 && i/5  -> count表示个数 count++
​
        Scanner scanner = new Scanner(System.in);
        //键盘录入两个数字number1和number2
        System.out.println("键盘录入两个数字number1和number2表示一个范围");
        int number1 = scanner.nextInt();
        int number2 = scanner.nextInt();
        int count = 0;
        System.out.println("既能被3整除,又能被5整除数字有:");
        //一个范围
        for ( int i = number1;i <= number2;i++){
            if ( i%3 ==0 && i%5 ==0 ){
                //表示个数次数
                count++;
                System.out.println(i);
            }
​
        }
        System.out.println("共有:" + count + "个");
​
        System.out.println("^^");
    }
}
​

题目3

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

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

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

答案

 package test;
​
public class test9 {
    public static void main(String[] args) {
        //需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),
        //
        //• 假如我有一张足够大的纸,它的厚度是0.1毫米。
        //
        //• 请问,我折叠多少次,可以折成珠穆朗玛峰的高度? -> >= height
​
        //分析:
        //1.8844430毫米 -> int height
        //2.0.1毫米 -> int paper
        //3.折叠多少次 -> count++
        //4.折叠 -> 循环 -> 不知道次数 -> 用while
​
        int height = 8844430;
        double paper = 0.1;
        int count = 0;
        while (paper < height){
            paper = paper * 2;
            count++;
        }
        System.out.println(count);
        System.out.println("^^");
    }
}
​

题目4

需求:给你一个整数 x 。

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

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

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

答案

package test;
​
public class test10 {
    public static void main(String[] args) {
        //需求:给你一个整数 x 。
        //
        //如果 x 是一个回文整数,打印 true ,否则,返回 false 。
        //
        //解释:回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
        //
        //例如,121 是回文,而 123 不是。
​
        //分析:
        //1.核心思想:将这个数反过来,与原来的数比较,一样就是回文数
        //2.整数 x -> int x
        //3.打印 true ,否则,返回 false -> 判断
        //4.使用个位公式+覆盖取右边的数 -> youBianDeShu = x / 1 % 10 -> youBianDeShu = x / 10
        //5.回文 -> 循环与判断
        //6.循环 -> 不知道次数 -> 用while
​
        int x = 12321;
        int temp = x;
        int youBianDeShu;
        int biJiaoDeShu = 0;
        //我服了
        //原来关键点是这个biJiaoDeShu
        //是用这个biJiaoDeShu来*10+youBianDeShu的数,一直搞成youBianDeShu*或者x*10
        while ( x != 0 ){
            youBianDeShu = x /1 % 10 ;
            x = x / 10;
            biJiaoDeShu = biJiaoDeShu * 10 + youBianDeShu;  //我吐了,这个循环想这么久
                                                            //我服了
                                                            //原来关键点是这个biJiaoDeShu
                                                            //是用这个biJiaoDeShu来*10+youBianDeShu的数,一直搞成youBianDeShu*或者x*10+youBianDeShu
        }
        System.out.println(biJiaoDeShu);
        System.out.println(biJiaoDeShu == temp);
        System.out.println("^^");
    }
}
​

题目5

需求:

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

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

得到商和余数。

答案

package test;
​
public class test11 {
    public static void main(String[] args) {
        //需求:
        //
        //•       给定两个整数,被除数dividend和除数divisor(都是正数,且不超过int的范围) 。
        //
        //•      将两数相除,要求不使用乘法、除法和 % 运算符。
        //
        //•      得到商和余数。
​
        //分析:
        //1.被除数dividend和除数divisor(都是正数,且不超过int的范围)
        //2.将两数相除,要求不使用乘法、除法和 % 运算符->循环相减->不知道减几次->while
        //3.商就是减几次->count
        //4.余数就是剩下的那个被减数dividend
​
        int dividend = 9;
        int divisor = 3;
        int count = 0;
        while (dividend >= divisor){
            dividend = dividend - divisor;
            count++;
        }
        System.out.println("商:" + count);
        System.out.println("余数:" + dividend);
​
        System.out.println("^^");
    }
}
​

题目6(较难)

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

训练提示

  1. 1949到2019有很多年?逐个判断这么多年份肯定要用循环。

  2. 用什么条件来判断是否是猪年?

解题方案

  1. 使用for循环逐年判断,根据2019是猪年这个条件,使用if来判断其他是猪年的年份。

操作步骤

  1. 定义for循环,1949到2019的年份是循环次数。

  2. 对每个年份逐个判断,如果年份和2019的差值是12的倍数,说明这年是猪年

  3. 打印符合条件的年份

答案

package test;
​
public class test12 {
    public static void main(String[] args) {
        //已知2019年是猪年,请在控制台输出从1949年到2019年中所有是猪年的年份。
​
        //分析:
        //1.1949-2019->知道次数->for循环
        //2.对每个年份逐个判断,如果年份和2019的差值是12的倍数,说明这年是猪年 -> (2019-year)%12==0 ->猪年
        int start = 1949;
        int end = 2019;
​
        System.out.println("1949年到2019年中所有是猪年的年份:");
​
        for (int i = start;i <= end;i++){
​
            if ( (end - i) % 12 == 0 ){
                System.out.println(i);
            }
​
        }
​
        System.out.println("^^");
    }
}
​

题目7(较难)

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

训练提示

  1. 从1988年到2019年有很多年,每年都需要判断,用什么知识点对每年进行判断?

解题方案

  1. 使用while循环完成

  2. 使用for循环完成

    以下以方案2为准

操作步骤

  1. 定义for循环,循环开始是1988,结束是2019

  2. 在循环中对年份进行判断

  3. 如果符合闰年的判断条件,则打印该年份

答案

package test;
​
public class test13 {
    public static void main(String[] args) {
        //中国有闰年的说法。
        //闰年的规则是:四年一闰,百年不闰,四百年再闰。
        //(年份能够被4整除但不能被100整除算是闰年,年份能被400整除也是闰年)。-> (a && b) || c
        //请打印出1988年到2019年的所有闰年年份。
​
        int start = 1988;
        int end = 2019;
​
        System.out.println("1988年到2019年的所有闰年年份:");
​
        for (int i = start;i <= end;i++){
​
            if ( (i%4==0 && i%100!=0) || i%400==0 ){
                System.out.println(i);
            }
​
        }
​
        System.out.println("^^");
    }
}
​注:题目出自黑马课程

你可能感兴趣的:(java,学习,笔记)