为什么,原因?

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();  //为什么这句不能留,而上面那句必须要?

wshyzx
浏览 1504回答 2
2回答

望远

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块就可以不用吸收数据。

剑术趋于化境

这个纸牌的程序我写过的,不过被我误删了。我学到现在脑子都糊了。你的问题回答不了,不过只有两个玩家,你就分别创建吧,player1,player2。建第二个玩家的时候做判断。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java