我是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()
,然后检查输入是否为数字。