原始问题描述
期末考试满分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);
}
}
}
标签:分数,java,Scanner,System,期末,成绩,输入,out From: https://www.cnblogs.com/xkxf/p/18418772