当前位置: 首页 > 知识库问答 >
问题:

Java扫描器。NextInt()跳过输入

贲高寒
2023-03-14

这里是Java新手,尝试扫描下面表单中的输入:

3

3 3
101
000
101

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);
    }
}

拜托,有更有经验的人能教我如何解决这个问题吗?我发现一些问题与。nextline()和。nextint()有类似的问题,但不完全是这样。不过,如果真的是复制品,我提前道歉...

(如果需要,我会添加更多信息)

共有1个答案

鲁鹏
2023-03-14

您正在调用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));
    }
}

更新

 类似资料:
  • 我正试图使用扫描仪从键盘上获取一个int值,但我得到了以下错误: 写入核心转储失败。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited”

  • 我试图从用户那里得到2个整数。这是我的代码的相关部分: 起初,它抛出一个,所以我使用了。现在,它只需跳过扫描器并立即调用。

  • 这让我很费解。我正在试图理解如何解决Java无法识别我的“settitle”方法存在于第一个“song”之后的问题。这是一个音乐应用程序。它还有另外两个类。我们将非常感谢所有的帮助。 编辑:添加歌曲类。

  • 问题内容: 我正在编写一个使用Event类的程序,该类中有一个日历实例和一个String类型的描述。创建事件的方法使用扫描仪获取月,日,年,小时,分钟和说明。我遇到的问题是Scanner.next()方法仅返回空格之前的第一个单词。因此,如果输入为“我的生日”,则该事件实例的描述就是“我的”。 我做了一些研究,发现人们使用Scanner.nextLine()解决此问题,但是当我尝试这样做时,它只是

  • 我这里有两个代码块。一个扫描器正确地等待用户输入,另一个则直接通过它并调用,返回。下面是工作的块: 下面是没有的块: 这两个都是单独的类,并且是从另一个类中的main方法调用的。基本上,调用,后者又调用某个Player类的方法...这是非工作代码所在的地方。程序中是否有不适合接受输入的时候?我的印象是,任何时候我需要用户输入,我都可以使用这种方法。谢谢!