【发布时间】:2019-10-20 02:29:34
【问题描述】:
***更新我的帖子以显示我的所有代码,希望这能提供更多上下文。
当我运行程序时,它会跳过我的第一个“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
【问题讨论】:
-
如果您给出除数字以外的任何其他值,那么您将收到此错误,因为您正在转换为整数,对吧?
-
不相关,但
while (flag = true)没有做你想做的事。 -
同样不相关,您不处理“eXit”、“eXIt”、“eXIT”或“ExIT”(以及更多排列!)
if (userInput.equalsIgnoreCase("exit")) -
您必须在命令行上提供输入。如果你只是按下回车,它将是
""(空字符串),你会得到错误(异常)。Integer.parseInt需要以字符串的形式给出一个整数,例如“42”。 -
我知道我需要在命令行上提供输入,但是当我运行程序时它会立即抛出错误。似乎它跳过了“if”并直接进入“else”语句......
标签: java if-statement boolean java.util.scanner parseint