Java Scanner .nextInt() 跳过输入
Posted
技术标签:
【中文标题】Java Scanner .nextInt() 跳过输入【英文标题】:Java Scanner .nextInt() skipping inputs 【发布时间】:2019-11-16 12:32:01 【问题描述】:这里是Java新手,尝试扫描以下表单中的输入:
3
3 3 101 000 101
1 2 11
5 5 10001 00000 00000 00000 10001
(第一个数字是测试用例的数量,然后是行和列,0s和1s是世界的状态,等等。基本上和任何典型的BFS问题一样)
下面是我尝试从控制台获取输入的 Java 代码的一部分。 cmets 是我在调试时在 watch 部分看到的值:
public static void main(String[] args)
Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
int t = in.nextInt(); // t: 3, in.nextInt(): 3 as expected
for (int i = 1; i <= t; i++) // i: 1, t: 3, in.nextInt(): 3 (not sure which "3")
int row = in.nextInt();
// after this line in.nextInt(): 101 and row: 0 which are all WEIRD
int column = in.nextInt();
// now here it's in.nextInt(): 2 and column: 2
int world[][] = new int[row][column];
// in.nextInt(): 11 now and as we see it changed its value when I didn't even call it
TreeMap<Integer, ArrayList<int[]>> distancesRandAcc = new TreeMap<Integer, ArrayList<int[]>>();
distancesRandAcc.put(0, new ArrayList<int[]>());
for (int j = 0; j < row; j++)
int temp = in.nextInt();
char[] s = Integer.toString(temp).toCharArray();
for (int k = 0; k < column; k++)
world[j][k] = Character.getNumericValue(s[k]);
int result = calculateDeliveryTime(world, row, column, distancesRandAcc);
System.out.println("Case #" + i + ": " + result);
这做了一些超出“常识”的奇怪事情。在将所有输入放入 IntelliJ 控制台后,我正在逐行调试,似乎 in.nextInt() 无法停止在随机行中获取随机数量的令牌无论我是否调用它。
当我在逐行调试时尝试逐行输入输入时,似乎对 .nextInt 的一次调用要求两个 int 值。 (我输入了一个数字并输入,但它仍然在等待另一个输入,同时停留在 .nextInt() 只调用一次的同一行)
此时,我感觉我的调试过程是错误的,或者至少是一些外部问题,而不是代码本身。我可能错了,因为我仍然认为自己是新手......
请有经验的人教我如何解决这个问题?我发现一些问题与 .nextLine() 和 .nextInt() 有类似的问题,但不完全是这样。如果它真的是重复的,我提前道歉......
(如果需要我会添加更多信息)
【问题讨论】:
【参考方案1】:您正在调用nextInt()
,因此输入000
被解析为数字0
,因此int
返回值是0
。因此Integer.toString()
将返回字符串"0"
。你为什么对此感到惊讶?
由于您实际上并不关心作为数字输入的内容,因此只需使用next
:
for (int j = 0; j < row; j++)
String s = in.next();
for (int k = 0; k < column; k++)
world[j][k] = Character.getNumericValue(s.charAt(k));
更新
这是读取输入的问题代码的唯一问题。 calculateDeliveryTime
是否有问题未知。
请参阅IDEONE 以获取证据。 calculateDeliveryTime
方法只是简单的打印二维数组,所以可以看出输入已经处理好了。
【讨论】:
感谢您提供的好选择。我已经按照您的建议更改了我的代码,它看起来肯定更好并且更有意义。但是,我的问题主要不是关于那部分。问题出现在前几行。 @JTC “问题出现在前几行”。不,不是。我运行了代码,当应用这里的更改时它运行良好。 哦,好吧!我又试了几次,又编辑了几行后整理出来。 + 我认为主要是我的调试技巧有问题。非常感谢!以上是关于Java Scanner .nextInt() 跳过输入的主要内容,如果未能解决你的问题,请参考以下文章
java 利用Scanner类的nextInt()方法从控制台读入一个整数
Java中Scanner类在nextInt()后无法输入nextLine()的问题
java Scanner类的nextInt()方法在循环中无法停止的问题
我在Scanner.nextInt()之后输入一个Scanner.nextLine()来使用新行,但它不能正常工作[重复]