分配双通道直通扫描仪不会读取第一个输入

问题描述 投票:0回答:1

我目前正在为一个班级编写程序。目的是使用户能够输入整数,并使用输入的大小初始化数组。然后,程序提示用户输入到每个阵列插槽的输入(等级如下所示)。当输入无效时,我们还应该利用while循环。我的问题是,要求升入一年级时,需要两个数字输入才能通过。

import java.util.Scanner;

public class ForWhile {

  public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      int arraySize;

      System.out.print("Gpa Calculator");
      System.out.print("\nEnter total classes: ");
      arraySize = scanner.nextInt();

      double[] grades = new double[arraySize];

      for (int i = 0; i < arraySize; i++) {

          System.out.println("Enter grade for class " + (i + 1) + ": ");
          grades[i] = scanner.nextDouble();

          while (!scanner.hasNextDouble()) {
              System.out.println("Percentage grades only please!");
              System.out.println("Enter a grade for class " + (i + 1) + ": ");
              grades[i] = scanner.nextDouble();
          }
      }
  }
}

这是我目前编写的内容,但是我希望在控制台中输入2:

GPA Calculator
Enter grade for class 1: 90
Enter grade for class 2: 85

要使其进展,需要发生的事情:

GPA Calculator
Enter a grade for class 1: 90
90
Enter a grade for class 2: 85

我尝试使用scanner.hasNextLine(),但没有成功,我缺少什么?我还认为我的while循环条件无法正确循环,因此不胜感激!

java arrays while-loop java.util.scanner
1个回答
0
投票

您当前正在检查是否有要读取的double之后您已经读取了double。这个,

grades[i] = scanner.nextDouble();

while (!scanner.hasNextDouble()) {
    System.out.println("Percentage grades only please!");
    System.out.println("Enter a grade for class " + (i + 1) + ": ");
    grades[i] = scanner.nextDouble();
}

应该是

while (!scanner.hasNextDouble()) {
    scanner.nextLine(); // consume the thing that isn't a double
    System.out.println("Percentage grades only please!");
    System.out.println("Enter a grade for class " + (i + 1) + ": ");
}
grades[i] = scanner.nextDouble();
© www.soinside.com 2019 - 2024. All rights reserved.