【问题标题】:Scanner won't allow me to continue after fixing an invalid response修复无效响应后,扫描仪不允许我继续
【发布时间】:2016-10-14 20:27:42
【问题描述】:

所以我编写了一个测试类来测试一个程序,该程序允许我学习课程数量、字母成绩和课程学分,然后在为 3 设计的循环中计算总加权点数、总学分和 GPA最大课程

但是,我需要验证课程数量并证明它会在输入无效和有效输入后运行。

我已经得到它,以便在无效响应后提示用户输入有效数量的课程,但是一旦输入有效响应,程序就会停止而不是像预期的那样运行。谁能告诉我为什么?

这是我的代码:

import java.util.*;
import java.lang.*;

public class ComputeGpa
{ 
   public static void main(String [] args)
   {
      Gpa grades1 = new Gpa();

      Scanner in = new Scanner (System.in);

      System.out.println("Enter number of courses: ");
      int courses = in.nextInt();
      if(courses > 0)
      {
        int i = 0;
        while(i < 3)
        {  
           System.out.println("Please enter a letter grade.");
           String letter = in.next();
           char result = letter.charAt(0);

           System.out.println("How many credits was this class worth?");
           int credits = in.nextInt();

           grades1.addToTotals(result, credits);
           i++;
        }
        System.out.printf("GPA: %.2f", grades1.calcGpa());
      }
      else
      {
        System.out.println("Number of courses must be greater than 0. Please enter a valid number of courses.");
        courses = in.nextInt();
      }        
    }
} 

输出如下:

Enter number of courses: 
-2
Number of courses must be greater than 0. Please enter a valid number of courses.
3

然后程序停止运行。我哪里错了?我认为字母 String 上的 in.next() 可以解决这个问题,但显然我错了。有任何想法吗?

【问题讨论】:

  • 这是你有循环的地方。

标签: java testing input output java.util.scanner


【解决方案1】:

您的流程当前是 if/else。

int foo = ...;
if(foo > 0) {
    //your grade stuff
}
else {
    //ask for reinput
}

最终发生的情况是,您只捕获了问题输入一次,但永远不会给您的流程再次检查它的机会。

相反,在if/else 布局上使用while 循环,强制重新进入,直到获得所需的确切信息,然后继续。

System.out.println("Enter number of courses: ");
int courses = in.nextInt();
while(courses < 0) {
    System.out.println("Number of courses must be greater than 0. Please enter a valid number of courses.");
    courses = in.nextInt();
}

int i = 0; 
//...

【讨论】:

  • 谢谢!我没有意识到如果在不正确的响应之后它不会循环回到开始。我只用了几个星期的 java 编码,所以这是一个很大的帮助!
猜你喜欢
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2021-03-15
  • 2020-06-06
  • 2016-07-28
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多