尝试使用 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
请为 userInput
和 examScore
使用两个输入,这将解决您的问题,因为您不能对 String
和 Integer
数据类型使用同一个值。
(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());
***更新我的 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
请为 userInput
和 examScore
使用两个输入,这将解决您的问题,因为您不能对 String
和 Integer
数据类型使用同一个值。
(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());