public void createPlayer(){
System.out.println("-----------创建玩家...--------------------");
try {
for(int i=1;i<3;i++){
System.out.println("请输入第"+i+"位玩家的ID和姓名:");
System.out.println("输入ID:");
Integer id=input.nextInt();
System.out.println("输入姓名:");
String name=input.next();
for (Player p : playerList) {//保证ID和姓名不重复。若重复,抛出异常
if(id.equals(p.id) || name.equals(p.name))
i=1/0;
}
Player player=new Player(id,name);
playerList.add(player);
}
} catch (InputMismatchException e) {
System.out.println("ID必须为数字!");
input.next();
createPlayer();
} catch (Exception e) {
System.out.println("ID或姓名不能相同!");
//input.next(); //为什么这句不能留,而上面那句必须要?
createPlayer();
}
for(int i=0;i<2;i++)
System.out.println("----欢迎玩家:"+playerList.get(i).name);
}见catch块内,input.next(); //为什么这句不能留,而上面那句必须要?
2 回答
已采纳
望远
TA贡献1017条经验 获得超1032个赞
catch (InputMismatchException e) {
System.out.println("ID必须为数字!");
input.next();
createPlayer();
} catch (Exception e) {
System.out.println("ID或姓名不能相同!");
//input.next();
createPlayer();
}
因为第一个捕获的异常是输入不匹配异常,表示你输入的id不是整型,比如你输入id时输入student,捕获到异常,程序跳转到catch块,这个时候键盘输入的数据就需要一个input.next()来吸收掉原来的错误数据student防止数据影响,楼主可以试着打印第一的catch块中input.next()接收的内容,而第二个catch块就可以不用吸收数据。
剑术趋于化境
TA贡献3条经验 获得超7个赞
这个纸牌的程序我写过的,不过被我误删了。我学到现在脑子都糊了。你的问题回答不了,不过只有两个玩家,你就分别创建吧,player1,player2。建第二个玩家的时候做判断。
添加回答
举报
0/150
提交
取消