期末所需分数.java

原始问题描述

期末考试满分100分,平时成绩满分40分。总评成绩由期末考成绩的60%和平时成绩组成。已知平时成绩,求期末考试至少需得多少分,以确保总评成绩不低于60分。

原始版本参考代码

import java.util.Scanner;

public class FishTank {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("你目前的平时分是:");
        int peacetimeScore = sc.nextInt();

        int target = 60; // target:目标成绩
        int realExamScore = target - peacetimeScore;
        // realExamScore:真实期末考试成绩.即已经乘以0.6以后的成绩
        // examScore:表面期末考试成绩.例如60*0.6=36,60是表面成绩,36是真实成绩
        double examScore = realExamScore / 0.6;
        System.out.printf("你期末需要考%.1f分才能不挂科\n", examScore);
    }
}

改进版问题描述

输入:想取得的总评分数、当前平时分

输出:期末考所需分数

要求:

一,应用if和循环语句,总评分数在0到100分之间、当前平时分在0到40分之间才属于合法输入,否则不予计算;

二,程序应当可以反复执行,而不是计算一次就结束;

三,注意程序的可读性、易读性、类的命名、代码缩进等。

改进版参考代码

import java.util.Scanner;

public class FishTank {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("*****************输入任意字母可结束程序**");
            System.out.print("你目前的平时分是:");
            int peacetimeScore = sc.nextInt();
            if (peacetimeScore < 0 || peacetimeScore > 40) {
                System.out.println("非法输入,不予计算!");
                continue;
            }

            System.out.print("你的目标成绩是:");
            int target = sc.nextInt(); // target:目标成绩
            if (target < peacetimeScore || target > 100) {
                System.out.println("非法输入,不予计算!");
                continue;
            }

            int realExamScore = target - peacetimeScore;
            // realExamScore:真实期末考试成绩.即已经乘以0.6以后的成绩
            // examScore:表面期末考试成绩.例如60*0.6=36,60是表面成绩,36是真实成绩
            double examScore = realExamScore / 0.6;
            System.out.printf("你期末需要考%.1f分\n", examScore);
        }
    }
}

输入输出参考:

*****************输入任意字母可结束程序**
你目前的平时分是:24
你的目标成绩是:80
你期末需要考93.3分
*****************输入任意字母可结束程序**
你目前的平时分是:24
你的目标成绩是:60
你期末需要考60.0分
*****************输入任意字母可结束程序**
你目前的平时分是:35
你的目标成绩是:60
你期末需要考41.7分
*****************输入任意字母可结束程序**
你目前的平时分是:35
你的目标成绩是:80
你期末需要考75.0分
*****************输入任意字母可结束程序**
你目前的平时分是:iyiititit
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:947)
    at java.base/java.util.Scanner.next(Scanner.java:1602)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2267)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2221)
    at FishTank.main(FishTank.java:10)

详尽注释版(通过ChatGPT添加)

import java.util.Scanner;  // 导入Scanner类,用于从控制台读取用户输入

public class FishTank {  // 定义一个名为FishTank的类,类是Java程序的基本组成部分
    public static void main(String[] args) {  // main方法是程序的入口,程序从这里开始执行
        Scanner sc = new Scanner(System.in);  // 创建一个Scanner对象,sc用于读取用户输入

        // 进入一个无限循环,程序会一直运行直到用户输入错误或非法数据
        while (true) {
            // 输出一个提示框,说明用户可以通过输入任意字母结束程序
            System.out.println("*****************输入任意字母可结束程序**");

            // 提示用户输入当前平时分(平时成绩),这是一个整数
            System.out.print("你目前的平时分是:");

            // 尝试读取用户输入的平时分数,如果输入了非数字,程序将会抛出异常
            int peacetimeScore = sc.nextInt();

            // 检查用户输入的平时分是否有效,平时分的范围应在0到40之间
            if (peacetimeScore < 0 || peacetimeScore > 40) {
                // 如果输入不合法,提示非法输入,并跳过本次计算,重新开始循环
                System.out.println("非法输入,不予计算!");
                continue;  // continue语句会让程序跳到下一次循环,忽略后面的代码
            }

            // 提示用户输入他们的目标总成绩,目标成绩是100分制
            System.out.print("你的目标成绩是:");

            // 尝试读取用户输入的目标分数,这个分数是期末考试的最终目标
            int target = sc.nextInt();

            // 检查目标分数是否合法。目标成绩应该大于平时分且小于等于100
            if (target < peacetimeScore || target > 100) {
                // 如果输入的目标成绩不合法,提示非法输入,并重新开始循环
                System.out.println("非法输入,不予计算!");
                continue;  // 跳过后续代码,重新开始循环
            }

            // 计算真实的期末考试成绩,即需要在期末考试中得多少分
            // realExamScore = 目标总成绩 - 平时分数
            int realExamScore = target - peacetimeScore;

            // 期末考试分数占总成绩的60%,所以计算表面期末考试分数
            // examScore = realExamScore / 0.6 表示真实期末成绩除以0.6,得出表面成绩
            double examScore = realExamScore / 0.6;

            // 输出用户在期末考试中需要考多少分,保留一位小数
            System.out.printf("你期末需要考%.1f分\n", examScore);
        }
    }
}

 

posted @ 2024-09-18 16:38  xkfx  阅读(25)  评论(0编辑  收藏  举报