Назначение двойного сквозного сканера не считывает первый вход - PullRequest
0 голосов
/ 10 марта 2020

Я сейчас пишу программу для класса. Цель состоит в том, чтобы пользователь мог ввести целое число и инициализировать массив с указанным размером. После этого программа запрашивает ввод данных, поступающих в каждый из этих слотов массива (оценки, как показано ниже). Мы также должны использовать некоторое время l oop, когда ввод недействителен. Моя проблема в том, что при запросе в первый класс требуется два числовых ввода от l oop до.

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 (), но не слишком успешно, что я отсутствует? Я также думаю, что мое условие l oop не зацикливается корректно, любой ввод будет очень полезен!

1 Ответ

0 голосов
/ 10 марта 2020

В настоящее время вы проверяете, есть ли 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...