尝试使用 Integer.parseInt() 将字符串转换为整数时出错

Error when trying to convert string to integer using Integer.parseInt()

***更新我的 post 以显示我的所有代码,希望这能提供更多上下文。

当我 运行 程序时,它会跳过我的第一个 "if" 语句并抛出错误。***

我遇到错误 Exception in thread "main" java.lang.NumberFormatException: For input string: ""

我试图在 while 循环的第一个 else 语句中将字符串变量转换为 int...错误发生在 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


请为 userInputexamScore 使用两个输入,这将解决您的问题,因为您不能对 StringInteger 数据类型使用同一个值。

(but it is possible when your input value is '123' (digits only) even this is also not applicable for your program)

添加 scan.nextLine() 移动扫描器以读取下一行(新行)。

System.out.println("Enter the highest possible value for the exam: ");
int highRange = scan.nextInt();
scan.nextLine();   // Add this line 

只要您按 ENTER 输入最高分数,扫描器就会读取整数 (nextInt),但也会读取行尾 (nextLine)。由于行中没有提供文本,因此它被读作空字符串“”。

您应该将 scanner.nextInt 替换为 scanner.nextLine,在 code.It 中应该可以正常进行以下更改。

//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());