首页 > 解决方案 > 如果输入对 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.");
              }
            }
          }
        }
      }
    }
  }
  
}

标签: javaloopsif-statementcalculation

解决方案


你的方法有很多缺陷,比如嵌套 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.");
        }
    }
}

让我知道这是否有帮助:)


推荐阅读