import java.util.Scanner;
public class test {
/**
* @param args
*/
public static void main(String[] args)
{
Scanner input = new Scanner (System.in);
boolean US1 = false;
boolean game;
int score = 1;
int wage = 0;
int fin_score = 0;
String ans;
if (US1 == false) {
game = false;
System.out.println (score);
System.out.println("Enter a wager");
wage = input.nextInt();
}
if (wage < score) {
System.out.println ("What is the capital of Liberia?");
ans = input.next();
if (ans.equalsIgnoreCase("Monrovia")) {
System.out.println ("You got it right!");
System.out.println ("Final score " + fin_score);
}
}
}
}
我找到了一堆使用InputMismatchException的解决方案并尝试{} catch {}但是当它们在我的代码中实现时它们永远不会工作。有没有办法在这里实现这些?我试图创建一个迭代循环,直到输入的工资是一个整数
答案 0 :(得分:0)
您的代码中可以有多个catch异常,以检查输入错误。例如
try{
wage = input.nextInt();
catch (InputMismatchException e){
System.out.print(e.getMessage());
//handle mismatch input exception
}
catch (NumberFormatException e) {
System.out.print(e.getMessage());
//handle NFE
}
catch (Exception e) {
System.out.print(e.getMessage());
//last ditch case
}
其中任何一种都适用于扫描仪错误,但InputMismatchException
最适合使用。如果你将非工作代码包含在try-catch块中,那将对你的案例有所帮助。
答案 1 :(得分:0)
首先,您应该使用Scanner.nextLine
,因为Scanner.nextInt
使用空格和换行符作为分隔符,这可能不是您想要的(扫描仪上留下空格后的任何内容,打破任何下一次读取。)
请改为尝试:
boolean valid = false;
System.out.print("Enter a wager: "); //Looks nicer when the input is put right next to the label
while(!valid)
try {
wage = Integer.valueOf(input.nextLine());
valid = true;
} catch (NumberFormatException e) {
System.out.print("That's not a valid number! Enter a wager: ");
}
}
答案 2 :(得分:0)
是的!有一个很好的方法:
Scanner input = new Scanner(System.in);
boolean gotAnInt = false;
while(!gotAnInt){
System.out.println("Enter int: ");
if(input.hasNextInt()){
int theInt = input.nextInt();
gotAnInt = true;
}else{
input.next();
}
}