线程"main" java.util.InputMismatch字符串输入中的异常



我是java新手。

当我尝试为这个程序输入值时,我会得到

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at SugarSmashPlayer.get(Game.java:10)
at Game.main(Game.java:44)

我不知道为什么会发生这种事。我的猜测是,我在字符串声明或输入法上做了一些错误的事情。你能帮忙吗。如果我用输入行声明字符串数据类型,程序不会显示错误。但我想在上面用类声明它,而不是在构造函数内部。

import java.util.*;
class SugarSmashPlayer{
Scanner in=new Scanner(System.in);
int id;int n=0;String name;
int[] arr=new int[40];
void get(){
id=in.nextInt();
name=in.nextLine();
for(int i=0;i<10;){
arr[i]=in.nextInt();
n++;
if(arr[i]>=100){i++;}
else
{i=11;}
}
}
void set(){
System.out.println(id+" "+name+" ");
for(int i=0;i<n;i++){System.out.println(arr[i]+" ");
}
}
}
class PremiumSugarSmashPlayer extends SugarSmashPlayer{
void get1(){n=0;
id=in.nextInt();
name=in.nextLine();
for(int i=0;i<40;){
arr[i]=in.nextInt();
n++;
if(arr[i]>=100){i++;}
else
i=40;}
}
void set1(){
System.out.println(id+" "+name+" ");
for(int i=0;i<n;i++){System.out.println(arr[i]+" ");
}
}
}
public class Game{
public static void main(String[] args){
SugarSmashPlayer box=new SugarSmashPlayer();
PremiumSugarSmashPlayer box1=new PremiumSugarSmashPlayer();
box.get();
box.set();
box1.get1();
box1.set1();
}
}

您的输入是:

1
abc

nextInt将输入的下一个令牌读取为int,因此将把整数值1读取到id字段中。然后,如果使用nextLine,则它将使用""初始化name字段。nextLine的Javadoc状态:

使扫描程序前进到当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。

然后arr[i] = in.nextInt()将尝试读取abc,因此导致错误。

您应该输入为:

1 abc
532
235

或者您需要将代码更改为:

id = Integer.parseInt(in.nextLine()); //whole line is read

您正在使用

id = in.nextInt();

如果有人输入的不是数字,则会发生此异常。

您最好调用nextLine(),然后检查输入是否为数字。

最新更新