java - 如果输入对 if 语句无效,如何使用一个循环?
问题描述
我对 Java 编码很陌生。我现在正在上课学习它,但我遇到了循环问题。
我在这门课上的任务是只为一个计算 3 级加权总和的程序编写一个 while 循环。我正在使用 if else 语句和一个变量来声明它应该在什么用户输入上,但是,如果输入不在某个范围内,我需要它再次向用户询问相同的问题。到目前为止,这只适用于第一个问题,而不适用于其他两个问题。如果输入无效,我将如何再次提出相同的问题?
到目前为止,这是我的代码:
import java.util.Scanner;
public class Lab3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System. in );
double homework;
double midterm;
double finalGrade;
int i = 0;
while (i == 0) {
if (i == 0) {
System.out.print("Enter your HOMEWORK grade: ");
homework = scan.nextInt();
if (homework < 0 || homework > 100) {
System.out.println("[ERR] Invalid input. A homework grade should be in [0, 100].");
} else {
i++;
}
if (i == 1) {
System.out.print("Enter your MIDTERM EXAM grade: ");
midterm = scan.nextInt();
if (midterm < 0 || midterm > 100) {
System.out.println("[ERR] Invalid input. A midterm grade should be in [0, 100].");
} else {
i++;
}
if (i == 2) {
System.out.print("Enter your FINAL EXAM grade: ");
finalGrade = scan.nextInt();
if (finalGrade < 0 || finalGrade > 200) {
System.out.println("[ERR] Invalid input. A FINAL EXAM grade should be in [0, 200].");
} else {
i++;
double totalWeighted = (finalGrade / 200 * 50) + (midterm * .25) + (homework * .25);
System.out.println("[INFO] Student's Weighted Total is " + totalWeighted);
if (totalWeighted >= 50) {
System.out.println("[INFO] Student PASSED the class.");
} else {
System.out.println("[INFO] Student FAILED the class.");
}
}
}
}
}
}
}
}
解决方案
你的方法有很多缺陷,比如嵌套 if-else、while 条件无效、缩进和整体代码风格很差。即使您更改了while (i < 3),并且您输入了一个无效的值,比如说 MIDTERM 等级,您的循环也会陷入无限循环。
查看改进的代码并尝试理解它:
public class Main
{
public static void main(String [] args)
{
final Scanner scan = new Scanner(System.in);
final String[] questions = {
"Enter your HOMEWORK grade: ",
"Enter your MIDTERM EXAM grade: ",
"Enter your FINAL EXAM grade: "
};
double[] scores = new double[3];
int i = 0;
while(i < 3) {
System.out.print(questions[i]);
scores[i] = scan.nextInt();
if(i == 0) {
if(scores[i] >= 0 && scores[i] <= 100)
i++;
else
System.out.println("[ERR] Invalid input. A homework grade should be in [0, 100].");
}
else if(i == 1) {
if(scores[i] >= 0 && scores[i] <= 100)
i++;
else
System.out.println("[ERR] Invalid input. A midterm grade should be in [0, 100].");
}
else if(i == 2) {
if(scores[i] >= 0 && scores[i] <= 200)
i++;
else
System.out.println("[ERR] Invalid input. A FINAL EXAM grade should be in [0, 200].");
}
}
double totalWeighted = (scores[0] * 0.25) + (scores[1] * 0.25) + (scores[2] / 200 * 50);
System.out.println("[INFO] Student's Weighted Total is " + totalWeighted);
if (totalWeighted >= 50) {
System.out.println ("[INFO] Student PASSED the class.");
}
else {
System.out.println ("[INFO] Student FAILED the class.");
}
}
}
让我知道这是否有帮助:)
推荐阅读
- powershell - PowerShell - 反转包含表情符号的字符串
- wagtail - Wagtail 返回 301 或 404 状态代码,而不是未发布页面的默认 410
- winapi - 除非我禁用/启用我的设备,否则 CreateFile 失败
- reactjs - 使用带有 json 数组的 Map 函数(React)
- google-cloud-run - 为什么 Google Cloud Run 实例显示错误的可用内存和内核数
- azure - Azure 可用空间指标不显示任何数据
- reactjs - 反应路由器不响应参数
- postgresql - 一个 Postgres 查询,用下一行中的值减去一行中的值
- c - 如何检查路径是否是另一个的子目录
- python - 有没有办法使用转换器(pd.read_csv)中其他列的条目?