Ошибка при попытке преобразовать строку в целое число с помощью Integer.parseInt () - PullRequest
1 голос
/ 20 октября 2019

*** Обновление моего поста, чтобы показать весь мой код, надеюсь, это даст больше контекста.

Когда я запускаю программу, она пропускает мой первый оператор «if» и выдает ошибку. ***

Я получаю сообщение об ошибке Exception in thread "main" java.lang.NumberFormatException: For input string: ""

Я пытаюсь преобразовать строковую переменную в int в первом операторе else цикла while ... Ошибка возникает в int examScore = Integer.parseInt(userInput).

   import java.util.Scanner;//imports scanner

   public class ExamScoresCalculator{

   public static void main(String[] args){



   Scanner scan = new Scanner(System.in);//creates new scanner object 

   //prompts user for lowest possible exam score
   System.out.println("Enter the lowest possible value for the exam: ");
   int lowRange = scan.nextInt();

   //prompts user for highest possible exam score
   System.out.println("Enter the highest possible value for the exam: ");
   int highRange = scan.nextInt();

   boolean flag = true; //while loop flag
   double lowestExamScore = highRange; // holds lowest score
   double highestExamScore = lowRange; //holds highest score
   double totalPoints = 0; //holds sum of all scores entered
   int totalExams = 0; //holds the total number of exams entered by the user

   while (flag == true){
      System.out.println("Enter an exam score between " + lowRange + " and " + highRange + " or type exit. "); //asks user for an exam score within correct range     
      String userInput = scan.nextLine();

      if ((userInput.equals("exit")) || (userInput.equals("Exit")) || (userInput.equals("EXIT"))){ //checks if user enters "exit"
         flag = false; //ends while loop

      }else{      
         int examScore = Integer.parseInt(userInput); //converts user input into integer 

         if (examScore >= lowRange && examScore <= highRange){ //checks if user entered a correct test score
            totalExams += 1; //increments totalExams by 1
            totalPoints += examScore; //adds examScore total to totalPoints

            if (examScore < lowestExamScore){ //checks if the exam score entered is the lowest 
               lowestExamScore = examScore; //updates lowestExamScore variable 
            }

            else if (examScore > highestExamScore){ //checks if exam score entered is the highest 
               highestExamScore = examScore; //updates highestExamScore variable 
            }

         }else{
            System.out.println("Please enter a correct score."); //asks user to enter a correct score 
         }

      }


   }//closing while loop 

   //prints the total number of exams, lowest score, highest score, and average score to screen 
   System.out.println("Total number of exams: " + totalExams);
   System.out.println("Lowest exam score: " + lowestExamScore);
   System.out.println("Highest exam score: " + highestExamScore);
   System.out.println("Average exam score: " + (totalPoints / totalExams)); 

   }//closing main 
   }//closing class


Ответы [ 3 ]

0 голосов
/ 20 октября 2019

Добавьте scan.nextLine (), чтобы переместить сканер для чтения следующей строки (новой строки).

System.out.println("Enter the highest possible value for the exam: ");
int highRange = scan.nextInt();
scan.nextLine();   // Add this line 
0 голосов
/ 20 октября 2019

После того как вы нажмете ENTER , чтобы ввести наивысшую оценку, сканер считывает целое число (nextInt), но также читает конец строки (nextLine). Поскольку в строке нет предоставленного текста, он читается как и пустая строка "".

Вы должны заменить scanner.nextInt на scanner.nextLine в коде. Он должен нормально работать с приведенными ниже изменениями.

//prompts user for lowest possible exam score
  System.out.println("Enter the lowest possible value for the exam: ");
   int lowRange = Integer.parseInt(scan.nextLine());

   //prompts user for highest possible exam score
System.out.println("Enter the highest possible value for the exam: ");
   int highRange = Integer.parseInt(scan.nextLine());
0 голосов
/ 20 октября 2019

Пожалуйста, используйте два ввода для userInput и examScore, которые решат вашу проблему, поскольку вы не можете использовать одно значение для типов данных String и Integer.

(но это возможно, если ваше входное значение равно «123» (только цифры), даже если это не применимо для вашей программы)

...