代替
scan.nextInt(),我将
scan.nextLine()再次使用,然后解析输入。如果得到
NumberFormatException,则可以向用户咆哮说输入已被插入。
之所以需要这样做,是因为serverPort输入的末尾还有换行符。使用时
nextInt(),扫描器将获取所有下一个令牌并将其转换为
Integer。Integer令牌之后的所有内容都需要扫描。
为了证明这一点,使用原始代码,如果在服务器端口输入后放置一个令牌分隔符(如空格),然后添加一些文本,您会发现随后的
userName分配将从数字末尾到下一个换行符。
System.out.println("nEnter port number:"); Integer serverPort = scan.nextInt(); System.out.println("nEnter your username:"); String userName = scan.nextLine(); System.out.println("nserverPort: " + serverPort+ "nuserName: " + userName);输入:
Enter port number: 123 abc Enter your username:
将输出
serverPort: 123 userName: abc
这是因为该空格充当令牌分隔符,并且在
scan.nextInt()调用后,空格和
abc仍保留在缓冲区中。当随后
scan.nextLine()被调用时,空间和
abc从缓冲器扫描。



