这是因为您正在使用
Scanner#next方法。并且,如果您查看该方法的文档,它将返回下一个读取的令牌。
因此,当您使用
next方法读取用户输入时,它不会
newline在末尾读取。然后由循环
nextLine()内部读取
while。因此,您所
firstName包含的内容是
newline您不知道的。
因此,您应
nextLine()在一段时间内使用而不是
next()。
nextInt方法也是如此。它还不读取换行符。因此,您可以
read使用
readLine并将其转换为
intusing
Integer.parseInt。
NumberFormatException如果输入值无法转换为,则会抛出该异常
int。因此,您需要相应地处理它。
您可以尝试以下代码:-
Scanner sc = new Scanner(System.in);System.out.println("Continue?[Y/N]");while (sc.hasNext() && (sc.nextLine().equalsIgnoreCase("y"))) {//change here System.out.println("Enter first name"); String name = sc.nextLine(); System.out.println("Enter surname"); String surname = sc.nextLine(); System.out.println("Enter number"); int number = 0; try { number = Integer.parseInt(sc.nextLine()); } catch (IllegalArgumentException e) { e.printStackTrace(); } System.out.println("Continue?[Y/N]");}
但是,请注意一件事,如果您输入的值无法传递给
Integer.parseInt您,则会出现异常,并且该输入将被跳过。在这种情况下,您需要使用
while循环来处理它。
或者,如果您不想执行该异常处理 :-
您可以添加一个
empty sc.nextLine()after
sc.nextInt(),它会消耗掉
newline剩余的东西,如下所示:-
// Left over part of your while loop String surname = sc.nextLine(); System.out.println("Enter number"); int number = sc.nextInt(); sc.nextLine(); // To consume the left over newline; System.out.println("Continue?[Y/N]");
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)