Java 数组扫描阻止下一次字符串扫描?
所以我有这个代码:Java 数组扫描阻止下一次字符串扫描?,java,arrays,Java,Arrays,所以我有这个代码: 我在数组中插入4个数字 插入后,我想检查哪两个数字最大,哪两个最小 在执行此检查之前,我想询问用户是否要添加新号码 此号码将替换其他号码之一 问题是我的代码在这一行之后就停止了: System.out.println("Do you wish to add another number [Y/N]?"); 我永远无法输入Y或N(“是/否”)。但是,如果我在它之前删除扫描,这是可行的。我使用的import语句是import.util.*任何想法或有用的建议都将不胜感激 代
- 我在数组中插入4个数字
- 插入后,我想检查哪两个数字最大,哪两个最小
- 在执行此检查之前,我想询问用户是否要添加新号码
- 此号码将替换其他号码之一
System.out.println("Do you wish to add another number [Y/N]?");
我永远无法输入Y或N(“是/否”)。但是,如果我在它之前删除扫描,这是可行的。我使用的import语句是import.util.*代码>任何想法或有用的建议都将不胜感激
代码如下:
Scanner sc = new Scanner (System.in);
int[] array;
array = new int[4];
System.out.println("Enter nr1:");
array[0] = sc.nextInt();
System.out.println("Enter nr2:");
array[1] = sc.nextInt();
System.out.println("Enter nr3:");
array[2] = sc.nextInt();
System.out.println("Enter nr4:");
array[3] = sc.nextInt();
System.out.println("Do you wish to add another number [Y/N]?");
String answer = sc.nextLine();
if ("N".equals(answer)){
Arrays.sort(array);
System.out.println(Arrays.toString(array));
System.out.println("Samllest value: " + array[0]);
System.out.println("Second smalles value: " + array[1]);
System.out.println("Second biggest value: " + array[2]);
System.out.println("Biggest value: " + array[3]);
}
您希望使用的是Scanner.next()
而不是Scanner.nextLine()
您希望使用的是Scanner.next()
而不是Scanner.nextLine()
问题在于Scanner#nextInt()
和类似方法不处理行尾令牌。一种解决方案是,在调用nextLine()
后,只需调用nextLine()
,即可处理并丢弃此令牌
i、 e
问题在于Scanner#nextInt()
和类似方法不处理行尾标记。一种解决方案是,在调用nextLine()
后,只需调用nextLine()
,即可处理并丢弃此令牌
i、 e
这是因为sc.nextInt()
您需要跳过它或使用sc.nextLine()
并适当地解析结果。Java不喜欢对int和String使用相同的扫描程序。对nextLine()使用第二个扫描仪,它就会工作。@StefanNeubert:这完全是错误的。我只是尝试了一下,java不在乎。@Lion:nextInt调用没有问题,我只是尝试了一下,效果很好。@Kane-当你使用Scanner.nextInt()时,它本身并不使用新行(或其他分隔符),所以返回的下一个标记通常是空字符串。因此,您需要使用Scanner.nextLine()
跟踪它。当然没有什么错,但是以这种方式使用它时应该小心。这是因为sc.nextInt()
您需要跳过它或使用sc.nextLine()
并适当地解析结果。Java不喜欢对int和String使用相同的扫描程序。对nextLine()使用第二个扫描仪,它就会工作。@StefanNeubert:这完全是错误的。我只是尝试了一下,java不在乎。@Lion:nextInt调用没有问题,我只是尝试了一下,效果很好。@Kane-当你使用Scanner.nextInt()时,它本身并不使用新行(或其他分隔符),所以返回的下一个标记通常是空字符串。因此,您需要使用Scanner.nextLine()
跟踪它。当然没有什么错,但在以这种方式使用它时应该小心。1+因为这是可行的,但有时你需要调用nextLine()
,然后这就不起作用了。公平地说,这只是对他的问题的最快回答。现在使用这个解决方案,因为这是我正在做的一个小练习。谢谢你的帮助@欢迎你,尼尔森。如果您使用了答案,您应该将其标记为已接受,以便其他人看到问题已得到回答。1+因为这是可行的,但有时您需要调用nextLine()
,然后这就行不通了。很公平,这是对他的问题最快的回答。现在使用这个解决方案,因为这是我正在做的一个小练习。谢谢你的帮助@欢迎你,尼尔森。如果您使用了答案,您应该将其标记为已接受,以便其他人看到问题已被回答。
System.out.println("Enter nr1:");
array[0] = sc.nextInt();
sc.nextLine();
System.out.println("Enter nr2:");
array[1] = sc.nextInt();
sc.nextLine();
System.out.println("Enter nr3:");
array[2] = sc.nextInt();
sc.nextLine();
System.out.println("Enter nr4:");
array[3] = sc.nextInt();
sc.nextLine();
System.out.println("Do you wish to add another number [Y/N]?");
String answer = sc.nextLine();