这是我要解决的问题的链接: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
我应该如何修改我的代码才能阅读此输入?
答案 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键。
因此,输入以空格分隔的字符,并使用回车结束输入。