Java学习笔记day04

流程控制语句

顺序结构

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

这是默认的结构

分支结构

if语句
第一种格式(单条件判断)
复制代码
if(关系表达式){
    语句体;
}

例如:

复制代码
if(酒量>2){
    System.out.println("小伙子,不错");
}

执行流程:

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

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

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

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

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    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("小伙子,不错");
     }
    }
}

if的注意点:

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

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

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

复制代码
package demo1;

public class Test1 {
    public static void main(String[] args) {
        boolean flag = false;
        if(flag) {
            System.out.println("flag的值true");
        }
    }
}

练习:

小红:如果你这次考试全班第一,我就做你女朋友,同学们为了成全都交了白卷

复制代码
package demo1;

public class Test1 {
    public static void main(String[] args) {
        //小红:如果你这次考试全班第一,我就做你女朋友。
        int ranking = 1;
        if (ranking == 1) {
            System.out.println("小红成为小明的女朋友");
        }

    }
}

绿灯亮,车辆可以通行

复制代码
package demo1;

public class Test1 {
    public static void main(String[] args) {
           boolean isLightGreen = true;
           boolean isLightYellow = false;
           boolean isLightRed = false;
           if (isLightGreen){
               System.out.println("绿灯亮,车可以通过");
           }
           if (isLightYellow){
               System.out.println("黄灯亮,车等一等");
           }

           if (isLightRed){
               System.out.println("红灯亮,车不可以通过");
           }
    }
}
第二种格式(双条件判断)
复制代码
if (关系表达式) {
      语句体1;
           }else{
              语句体2;  
           }

执行流程:

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

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

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

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

练习:

吃饭

键盘录入一个整数,表示身上的钱。

如果大于等于100块,就是网红餐厅。

否则,就吃经济实惠的沙县小吃。

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("请输入身上所有的钱:");
      Scanner sc = new Scanner(System.in);
      int money = sc.nextInt();
      if(money >= 100){
          System.out.println("吃网红餐厅");
      }else{
          System.out.println("吃沙县小吃");
      }
    }
}

商品付款

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

假设,用户在超市实际购买,商品总价为:600元。

键盘录入一个整数表示用户实际支付的钱。

如果付款大于等于600,表示付款成功。否则付款失败。

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("用户实际支付的金额是:");
      Scanner sc = new Scanner(System.in);
      int money = sc.nextInt();
      if(money >= 600){
          System.out.println("支付成功");
      }else{
          System.out.println("支付失败");
      }
    }
}

影院选座:

在实际开发中,电影院选座也会使用到if判断。假设某影院售卖了100张票,票的序号为1~100。其中奇数票号坐左侧,偶数票号坐右侧。键盘录入一个整数表示电影票的票号。根据不同情况,给出不同的提示:如果票号为奇数,那么打印坐左边如果票号为偶数,那么打印坐右边。

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("录入一个整数表示电影票的票号:");
      Scanner sc = new Scanner(System.in);
      int tickeNumber = sc.nextInt();
      int ticketNumberNow = tickeNumber % 2;
      if(tickeNumber>=0 && tickeNumber<=100){
      if(ticketNumberNow == 0){
          System.out.println("偶数票号,做右边");
      }else{
          System.out.println("奇数票号,做左边");
      }
      }else{
      System.out.println("这是一张假的票");
      }
    }
}

这是if的嵌套的写法

第三种格式(多条件判断)
复制代码
if(关系表达式1){
    语句体1;
}else if(关系表达式2){
    语句体2;
    }
    ......
    else{
    语句体n+1;
}

执行流程:

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

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

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

4.如果所以关系表达式结果都为false,就执行语句体n+1。

从上往下依次进行判断 ,只有要有一个判断为真,就执行对应的语句体,如果所有的判断都为假,就执行else的语句体

练习:

根据不同的分数送不同的礼物。如果是95~100分,送自行车一辆

如果是90~94分,游乐场玩一天

如果是80~89分,送变形金刚一个。

如果是80分以下,揍一顿。

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("考试分数:");
        Scanner sc = new Scanner(System.in);
        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.print("数据不合法");
        }

        }
    }

商品价格

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        int price = 1000;
        System.out.println("会员级别:");
        Scanner sc = new Scanner(System.in);
        int vip = sc.nextInt();
        if(vip == 1) {
            System.out.println("会员级别1,价格为:" + (price * 0.9));
        }else if(vip == 2){
            System.out.println("会员级别2,价格为:" + (price * 0.8));
        }else  if(vip == 3){
            System.out.println("会员级别3,价格为:" + (price * 0.7));
        }else{
            System.out.println("非会员,价格为:" + price);
        }
    }
}
switch语句
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给出的值不允许重复

练习:

兰州拉面、武汉热干面、北京炸酱面、陕西油泼面

定义变量记录我心里想吃的面

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    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;
    }
    }
}

运动计划

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

周一:跑步

周二:游泳

周三:慢走

周四:动感单车

周五:拳击

周六:爬山

周日:好好吃一顿

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("请输入星期数:");
        Scanner sc = new Scanner(System.in);
        String week = sc.next();
        switch(week){
            case "周一":
                System.out.println("跑步");
                break;
            case "周二":
                System.out.println("游泳");
                break;
            case "周三":
                System.out.println("慢走");
                break;
            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其他知识点

default的位置和省略

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

**省略:**defaule可以省略,语法不会有问题,但是不建议省略。

位置并不影响正常的运行

将defaule省略掉也是不影响运行,只不过在所有的case后面的值和表达式的值都不匹配时没有备用答案返回,只会没有反应如

case穿透

产生的原因是:语句体中没有写break导致的

执行流程:

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

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

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

使用场景:

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

switch新特性

这个特性是JDK12才有的,在此之前的都是没有的

复制代码
package demo1;
public class Test1 {
    public static void main(String[] args) {
        int number = 1;
        switch(number){
            case 1 -> {
                System.out.println("number的值为1");
            }
            case 50 -> {
                System.out.println("number的值为50");
            }
            case 100 -> {
                System.out.println("number的值为100");
            }
            default -> {
                System.out.println("number的值不在1、50、100中");
            }
        }
    }
    }

使用{}来简化掉了break

还可以简化成这样

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        int number = 1;
        switch(number){
            case 1 -> System.out.println("number的值为1");
            
            case 50 -> System.out.println("number的值为50");
            
            case 100 -> System.out.println("number的值为100");
            
            default -> System.out.println("number的值不在1、50、100中");
            
        }
    }
    }

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

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

switch:把有限个数据一一列举出来,让我们任选其一

if的第三种格式比如小明的礼物

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("考试分数:");
        Scanner sc = new Scanner(System.in);
        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.print("数据不合法");
        }

        }
    }

switch:把有限个数据一一列举出来,让我们任选其一,比如吃面的练习

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    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;
    }
    }
}

练习

休息日和工作日

需求:

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

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

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("请输入星期数:");
        Scanner  sc = new Scanner(System.in);
        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;
        }

        }
    }

也可以简化成:

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("请输入星期数:");
        Scanner  sc = new Scanner(System.in);
        int week = sc.nextInt();
        switch(week){
            case 1,2,3,4,5:
                System.out.println("工作日");
                break;
            case 6,7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("输入的星期数有误");
                break;
        }

        }
    }

还可以简化成:

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("请输入星期数:");
        Scanner  sc = new Scanner(System.in);
        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("输入的星期数有误");
                
        }

        }
    }

用户选择

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        System.out.println("请输入按键:");
        Scanner  sc = new Scanner(System.in);
        int key = sc.nextInt();
        switch(key){
            case 1:
                System.out.println("机票查询");
                break;
            case 2:
                System.out.println("机票预订");
                break;
            case 3:
                System.out.println("机票改签");
                break;
            case 4:
                System.out.println("退出服务");
                break;
            default:
                System.out.println("退出服务");
                break;
        }

        }
    }

进行简化

循环结构

什么是循环

重复的做某件事情

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

循环的分类
for循环

格式:

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

例如:

复制代码
for (int i= 1;i <= 10;i++){
    System.out.println("HelloWorld");
}

执行流程:

1.执行初始化语句

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

如果是false,循环结束

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

3.执行条件控制语句

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

初始化语句只会执行一次

判断语句为true,循环继续

判断语句为false,循环结束

练习

打印五次HelloWorld

复制代码
package demo1;
public class Test1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("HelloWorld");

        }
    }
}

打印1-5

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println(i);

        }
    }
}

打印5-1

复制代码
package demo1;
public class Test1 {
    public static void main(String[] args) {
        for (int i = 5; i >= 1; i--) {
            System.out.println(i);
        }
    }
}

断线重连

在实际开发中,需要重复执行的代码,会选择循环实现。

比如:如左图所示。玩游戏的时候,如果网不好那么会经常断线重连。

那么断线重连这个业务逻辑就需要重复执行。

假设现在公司要求断线重连的业务逻辑最多只写5次。

请用代码实现。

备注:断线重连的业务逻辑可以用输出语句替代。

复制代码
package demo1;
public class Test1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("断线重连");
        }
    }
}
复制代码
package demo1;
public class Test1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println("第"+ i+"断线重连");
        }
    }
}

求和

复制代码
package demo1;
public class Test1 {
    public static void main(String[] args) {
        int sum =0;
        for(int i=1;i<=5;i++){
            System.out.println(i);
            sum += i;
        }
        System.out.println("1到5的和是:" + sum);
    }
}

扩展小点

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

2.如果我们把变量定义在循环的里面,那么当前变量只能在本次循环中有效。

当本次循环结束之后,变量就会从内存中消失。

第二次循环开始的时候,又会重新定义一个新的变量。

**结论:**如果以后我们要写累加求和的变量。可以把变量定义在循环的外面。

求和

需求:在实际开发中,如果要获取一个范围中的每一个数据时,会用到循环。

但是此时,大多情况下,不会获取所有的数据,而是获取其中符合要求的数据。

此时就需要循环和其他语句结合使用了。

求1-100之间的偶数和

复制代码
package demo1;
public class Test1 {
    public static void main(String[] args) {
    //定义用来累加的变量sum
        int sum =0;
    for(int i=1;i<=100;i++){
        if(i%2==0){
            sum+=i;
            //sum=sum+i;
        }
    }
        System.out.println(sum);
    }
}

键盘录入两个数字,表示一个范围。统计这个范围中。

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

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个整数:");
        int a = sc.nextInt();
        int b = sc.nextInt();
        //定义一个统计变量
        int count =0;
        for(int i =a;i<=b;i++){
            if(i%3==0 && i%5==0){
                count++;
                //count++:等价于count = count + 1,找到一个符合条件的数,统计个数就加 1。
            }
        }
        System.out.println(count);
    }
}
while循环
格式
复制代码
初始化语句;
while(条件判断语句) {
    循环体语句;
    条件控制语句;
}

初始化语句只执行一次

判断语句为true,循环继续

判断语句为false,循环结束

练习:

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

复制代码
package demo1;
public class Test2 {
    public static void main(String[] args){
        int i = 1;
        while(i<=100){
            System.out.println(i);
            i++;
        }
    }
}
for 和while的对比

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

for和while的区别

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

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

**for循环中:**知道循环次数或者循环的范围

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

练习:

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

**分析:**折纸张:每一次折叠纸张的厚度都是原先的两倍

double a = 0.1;

a=a*2;或者a*=2

1.定义一个变量用来记录山峰的高度

2.定义一个变量用来记录纸张的初始厚度

3.定义一个变量用来统计次数

4.循环折叠纸张,只要纸张的厚度小于山峰的高度,那么循环就继续,每折叠一次,统计次数就要++

此时我们不知道循环的次数也不知道循环的范围,只知道循环的结束条件,所以用while循环

复制代码
package demo1;
public class Test2 {
    public static void main(String[] args){
        double height = 8844430;
        double paper = 0.1;
        int count = 0;
        while(paper < height){
            paper*=2;
            count++;
        }
        System.out.println(count);
    }
}

回文数

需求:给你一个整数x。

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

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

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

**核心思路:**是将数字倒过来和原来的数字进行比较如果一样就是回文数

1.定义一个整数x

2.定义一个变量yuan,将定义的整数赋值给变量yuan

3.判断x是不是回文整数,使用if语句

4.使用循环语句将数字拆分再倒过来拼接在一起,这时需要定义一个变量num用来存储倒过来的数字,这里使用的是while语句,因为我们不知道整数的范围,不知到这是几位数字

5.使用if语句来判断yuan和num的值是否相等,如果相等就返回该整数是回文整数

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
      int x = sc.nextInt();
      int yuan = x;
      int num=0;
      if(x<0){
          System.out.println("该整数不是回文整数");
         return;   //直接结束程序,无需后续反转 
      }
      while(x!=0){
         int ge=x%10;
         num =num*10+ge;
         x=x/10;
      }
        System.out.println(num);
        if(num==yuan){
            System.out.println("该整数是回文整数");
        }else{
            System.out.println("该整数不是回文整数");
        }

    }
}

求商和余数

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

1.定义变量来记录被除数

2.定义变量来记录除数

3.定义一个变量来记录商其初始值为0

  1. 直到余数小于除数,循环结束,此时的余数就是最终余数。

    package demo1;
    public class Test2 {
    public static void main(String[] args){
    //定义变量来记录被除数
    int dividend = 10;
    //定义变量来记录除数
    int divisor = 3;
    //定义变量来记录商其初始值为0
    int quotient = 0;
    //定义变量来记录余数其初始值为被除数
    int remainder = dividend;
    //判断除数不能为0
    if(divisor==0){
    System.out.println("除数不能为0");
    return;
    }
    //结束是余数小于除数
    while(remainder>=divisor){
    remainder=remainder-divisor;
    quotient++;
    }
    //输出商和余数
    System.out.println("商为:"+quotient);
    System.out.println("余数为:"+remainder);
    }
    }

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

先执行后判断

题目

题目1

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

复制代码
package demo1;
public class Test2 {
    public static void main(String[] args){
       //方案1,不参与以旧换新的情况
       int oldPrice = 1500;
       int newPrice = 7988;
       int spendNew1 = newPrice - oldPrice;
       //方案2,参与以旧换新的情况
        double spendNew2 = newPrice * 0.8;
        if(spendNew1>spendNew2){
            System.out.println("李雷要以旧换新");
        }else{
            System.out.println("李雷不要以旧换新");
        }
    }
}
题目2

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

方案一:使用的是三元运算

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int number1 = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int number2 = sc.nextInt();
        System.out.println("请输入第三个整数:");
        int number3 = sc.nextInt();
        int tmp = number1 < number2 ? number1 : number2;
        int min = tmp < number3 ? tmp :number3;
        System.out.println("最小值:"+ min);

    }
}

方案二:使用if的第三种格式

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int number1 = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int number2 = sc.nextInt();
        System.out.println("请输入第三个整数:");
        int number3 = sc.nextInt();
        if(number1<=number2 && number1<=number3){
            System.out.println("最小值:"+number1);
        }else if(number2<=number3 && number2<=number1){
            System.out.println("最小值:"+number2);
        }else{
            System.out.println("最小值:"+number3);
        }
         sc.close();
    }
}
题目3

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

存期 年利率(%)

一年 2.25

两年 2.7

三年 3.25

五年 3.6

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

提示:

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

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

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
        System.out.println("请存入本金:");
        double principal = sc.nextDouble();
        System.out.println("请输入存期:");
        int depositTerm = sc.nextInt();
        //定义一个变量记录本息和
        double principalAndInterest = 0;
        if(principal>=1000){
            if(depositTerm == 1){
                principalAndInterest=principal+principal*2.25 / 100 * 1;
                System.out.println("存款一年的本息:"+principalAndInterest);
            }else if(depositTerm==2){
                principalAndInterest=principal+principal*2.7 / 100 * 2;
                System.out.println("存款二年的本息:"+principalAndInterest);
            }else if(depositTerm==3){
                principalAndInterest=principal+principal*3.25 / 100 * 3;
                System.out.println("存款三年的本息:"+principalAndInterest);
            }else if(depositTerm==5){
                principalAndInterest=principal+principal*3.6 / 100 * 5;
                System.out.println("存款五年的本息:"+principalAndInterest);
            }
        }else{
            System.out.println("本金不够1000");
        }
    }
}
题目4

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

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

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

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

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

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
        System.out.println("顾客类别:");
        int customer = sc.nextInt();
        if(customer != 0 && customer != 1) {
            System.out.println("错误:顾客类别只能输入0或1!");
            return; // 终止程序
        }
        System.out.println("折前金额:");
        double originalAmount = sc.nextDouble();
        if(originalAmount<0){
            System.out.println("错误:金额不能为负数!");
            return;
        }
        double payableAmount = 0;
        if(customer == 0 && originalAmount < 100){
            System.out.println("实际应付金额:"+originalAmount);
        } else if (customer == 0 && originalAmount >= 100) {
            payableAmount = originalAmount *0.9;
            System.out.println("实际应付金额:"+payableAmount);
        }else if (customer == 1 && originalAmount <200){
            payableAmount = originalAmount *0.8;
            System.out.println("实际应付金额:"+payableAmount);
        } else if (customer == 1 && originalAmount >= 200) {
            payableAmount = originalAmount *0.75;
            System.out.println("实际应付金额:"+payableAmount);
        }
    }
}
题目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元。

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

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
        System.out.println("税前工资:");
        double preTaxSalary  = sc.nextDouble();
        if(preTaxSalary<0){
            System.out.println("错误,工资不能为负数");
            return;
        }
       //定义一个变量计算该交个税的部分
        double taxableIncome =preTaxSalary-preTaxSalary*0.1-5000;
        //对应的纳税数额
        double tax=0;
        double netPay =0;
      if(taxableIncome<=0){
        tax=0;
        netPay=preTaxSalary-preTaxSalary*0.1-tax;
      } else if (taxableIncome>0 && taxableIncome<=3000) {
          tax=taxableIncome*0.03;
          netPay = preTaxSalary-preTaxSalary*0.1-tax;
      }else if(taxableIncome>3000 && taxableIncome<=12000){
          tax=3000*0.03+(taxableIncome-3000)*0.1;
          netPay = preTaxSalary-preTaxSalary*0.1-tax;
      }else if(taxableIncome>12000 && taxableIncome<=25000){
          tax=3000*0.03+9000*0.1+(taxableIncome-12000)*0.2;
          netPay = preTaxSalary-preTaxSalary*0.1-tax;
      }else if(taxableIncome>25000 && taxableIncome<=35000){
          tax =3000*0.03+9000*0.1+13000*0.2+(taxableIncome-25000)*0.25;
          netPay = preTaxSalary-preTaxSalary*0.1-tax;
      }else if(taxableIncome>35000 && taxableIncome<=55000){
          tax =3000*0.03+9000*0.1+13000*0.2+10000*0.25+(taxableIncome-35000)*0.3;
          netPay = preTaxSalary-preTaxSalary*0.1-tax;
      }else if(taxableIncome>55000 && taxableIncome<=80000){
          tax=3000*0.03+9000*0.1+13000*0.2+10000*0.25+20000*0.3+(taxableIncome-55000)*0.35;
          netPay = preTaxSalary-preTaxSalary*0.1-tax;
      }else{
          tax = 3000 * 0.03 + 9000 * 0.1 + 13000 * 0.2 + 10000 * 0.25 + 20000 * 0.3 + 25000 * 0.35 + (taxableIncome - 80000) * 0.45;
          netPay = preTaxSalary-preTaxSalary*0.1-tax;
      }
        System.out.println("纳税数额:"+tax);
        System.out.println("到手工资:"+netPay);
    }
}
题目6

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

要求:

请输入第一个整数: 30

请输入第二个整数: 40

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

控制台输出:30+40=70

复制代码
package demo1;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
        System.out.println("输入第一个整数:");
        int number1 = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int number2 = sc.nextInt();
        System.out.println("请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法):");
        int type = sc.nextInt();
        switch (type) {
          case 1:
            System.out.println("第一个整数+第二个整数:"+(number1+number2));
            break;
          case 2:
            System.out.println("第一个整数-第二个整数:"+(number1-number2));
            break;
          case 3:
            System.out.println("第一个整数*第二个整数:"+(number1*number2));
            break;
          case 4:
            System.out.println("第一个整数除于第二个整数:"+(number1/number2));
            break;
          default:
            System.out.println("您输入的运算类别有误");
            break;
        }
    }
}
题目7:

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

复制代码
package demo1;
public class Test2 {
    public static void main(String[] args){
        int starYear = 1949;
        int endYear = 2019;
        System.out.println("所有是猪年的年份:");
        for(int i = starYear; i <= endYear; i++){
           if(i%12==3){
               System.out.println(i);
           }
        }
    }
}
题目8

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

复制代码
package demo1;
public class Test2 {
    public static void main(String[] args){
        int starYear = 1988;
        int endYear = 2019;
        System.out.println("所有闰年年份:");
        for(int i = starYear; i <= endYear; i++){
           if(i % 4==0 && i % 100!=0 || i % 400 == 0){
               System.out.println(i);
           }
        }
    }
}
相关推荐
waper972 小时前
java项目部署上线,安全扫描问题的解决方案
java·安全·nacos·docker compose
plOUGhh2 小时前
【Redis学习笔记】(二)短信登录+商户查询缓存
笔记·学习
怒放de生命20102 小时前
IDEA 2025 最新版jrebel 破解
java·ide·intellij-idea
yangpan0112 小时前
colmap调试学习(二)--feature_matching
学习
GLDbalala2 小时前
GPU PRO 5 - 1.1 Per-Pixel Lists for Single Pass A-Buffer 笔记
笔记
载数而行5202 小时前
QT系列,对象树 栈和堆 QDebug以及日志打印
c++·qt·学习
red_redemption2 小时前
自由学习记录(127)
学习
庭前云落2 小时前
从零开始的OpenZeppelin学习 2| ERC20-permit、erc20pausable
学习·区块链
zyb11475824333 小时前
Redis的学习
数据库·redis·学习