Java:从数组中获取char输入结果为无限循环

时间:2018-03-31 01:31:48

标签: java arrays char

这是我要解决的问题的链接:https://dmoj.ca/problem/dmopc14c1p5

这是我为输入而编写的代码。

public static void main(String[] args) 
    {
        Scanner kbd = new Scanner(System.in);

        int y = kbd.nextInt(); //number of rows
        int x = kbd.nextInt(); //number of columns
        int initX = kbd.nextInt(); //initial starting position
        int initY = kbd.nextInt();
        int endX = kbd.nextInt(); //ending position (main office)
        int endY = kbd.nextInt();

        char [] [] maze = new char [y][x];

        for (int i = 0; i < y; i++)
        {
            for (int j = 0; j < x; j++)
            {
                maze[i][j] = kbd.next().charAt(0);
            }
        }

        //For checking
        for (int i = 0; i < y; i++)
        {
            for (int j = 0; j < x; j++)
            {
                System.out.print(maze[i][j]);
            }
            System.out.println();
        }


    }

但是,我不知道如何正确接受for循环中的char输入。我使用了通过此链接(How to take input for 'char' array in Java?)找到的scanner.next()。charAt(0)方法,但是无论我输入多少个字符,它都会导致无限循环无效。

我做错了什么?

更新

这是我将要接收的输入(字符之间没有空格):

OOXOO
OXOXO
OOOXX
XOXOX
OOOOO

我应该如何修改我的代码才能阅读此输入?

2 个答案:

答案 0 :(得分:3)

您的代码正常运行。只记得你需要输入char的至少x * y(你的变量名)次。

编辑:我刚看到你的更新。我们需要稍微考虑一下。

.charAt(0)

仅获取字符串的第一个字符并将其返回。如果你想把“ooxoo”变成['o','o','x','o','o'],你可以在字符串上使用toCharArray方法。但是,如果这样做,你的for循环将循环超过需要的时间。如果你知道你的输入集,你只能循环遍历n个字符串并接受它们并将它们转换为数组。如果您希望我详细了解,请告诉我。

答案 1 :(得分:1)

  

java.util.Scanner.next()方法查找并返回下一个   来自此扫描仪的完整令牌。

每次调用kbd.next()。charAt(0)时,都会调用next()并获取完整的令牌。默认情况下,标记由空格分隔。

在System.in提供数据之前,您还需要按Enter键。

因此,输入以空格分隔的字符,并使用回车结束输入。