![](/img/trans.png)
[英]Java - How do I check if a Scanner input is an integer without using a while loop?
[英]How do I make this program check if an input is an integer without causing an error in runtime and stop the loop with a sentinel value?
我一直在嘗試從我的程序中根除運行時錯誤,因為它正在檢查用戶輸入是否是 integer,如果不是,則打印出錯誤消息,並要求另一個輸入是 integer。 我還注意到,通過檢查 integer 現在我的程序不斷要求更多輸入,而不是在用戶輸入負 integer 時停止循環。 這是我的程序代碼中有問題的部分:
do
{
System.out.println("Enter an integer grade percentage: ");
examScore = keyboard.nextInt();
if (examScore != (int)examScore) {
System.out.println("Not an integer, please try again.");
if (examScore >= 90 && examScore <=100) {
gradeA++;
totalScores++;
}
else if (examScore >= 80 && examScore <=89) {
gradeB++;
totalScores++;
}
else if (examScore >= 70 && examScore <=79) {
gradeC++;
totalScores++;
}
else if (examScore >= 60 && examScore <=69) {
gradeD++;
totalScores++;
}
else if (examScore >=0 && examScore <= 59)
gradeF++;
totalScores++;
}
else {
if (examScore >= 90 && examScore <=100) {
gradeA++;
totalScores++;
}
else if (examScore >= 80 && examScore <=89) {
gradeB++;
totalScores++;
}
else if (examScore >= 70 && examScore <=79) {
gradeC++;
totalScores++;
}
else if (examScore >= 60 && examScore <=69) {
gradeD++;
totalScores++;
}
else if (examScore >= 0 && examScore <=59)
gradeF++;
totalScores++;
}
}while(examScore >=0);
感謝所有幫助!
您在最后一個else if
上缺少一個開頭{
。
nextInt()
返回一個int
那么if (examScore != (int)examScore) {
什么意義?
您可以使用Scanner.hasNextInt()
檢查用戶是否輸入了 integer。 如果沒有,請使用輸入並重試。
您可以利用以下事實來簡化等級條件:在if/else if/else
中,一旦執行一個塊,就會跳過 rest。
while (true) {
System.out.println("Enter an integer grade percentage: ");
do {
// Check for integer
while (!keyboard.hasNextInt()) {
// Not an int? Consume and discard
String input = keyboard.next();
System.out.println("Not an integer, please try again.");
}
examScore = keyboard.nextInt();
} while (examScore > 100); // Only except if in range
if (examScore >= 90) {
gradeA++;
}
else if (examScore >= 80) {
gradeB++;
}
else if (examScore >= 70) {
gradeC++;
}
else if (examScore >= 60) {
gradeD++;
}
else if (examScore >= 0) {
gradeF++;
}
else {
// Must be negative
break;
}
totalScores++;
}
從約翰尼莫普的答案中借用了驗證
public static void main(String[] args) {
final int[] scoreLimits = new int[]{90, 80, 70, 60, 0}; // this should be in descending order
final int[] gradeCount = new int[scoreLimits.length];
final char[] gradeLabel = new char[]{'A', 'B', 'C', 'D', 'F'};
final Scanner keyboard = new Scanner(System.in);
System.out.println("Enter an integer grade percentage between 0 and 100(both inclusive). Enter -1 to stop");
while (true) {
int examScore;
do {
// Check for integer
while (!keyboard.hasNextInt()) {
// Not an int? Consume and discard
String input = keyboard.next();
System.out.println("Not an integer, please try again.");
}
examScore = keyboard.nextInt();
} while (examScore != -1 && (examScore < 0 || examScore > 100)); // Only except if in range
if (examScore == -1) {
break;
}
for (int i = 0; i < scoreLimits.length; i++) {
if (examScore >= scoreLimits[i]) {
++gradeCount[i];
break;
}
}
}
System.out.println(Arrays.toString(gradeCount));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.