我必须编写一个制作二维数组的程序并将其打印出来。然后我应该通过这个迷宫引导一个“角色”。所以我想让它向上/向下/向左/向右移动。允许用户输入u / U / d / D / l / L / r / R.
我输入以便如果其中一个没有输入就会给我一个错误。但如果输入正确,它仍然会给我一个错误。
char move;
System.out.println("Which way do you want to move? U/D/L/R");
move=stdin.nextLine().charAt(0);
while(move != 'u' || move !='U') {
while( move != 'd' || move != 'D'){
while( move != 'l' || move != 'L'){
while(move != 'r' || move != 'R'){
System.out.println("Invalid input. Try again.");
move = stdin.nextLine().charAt(0);
}}}}
答案 0 :(得分:2)
试试这个:
Scanner stdin;
stdin = new Scanner(System.in);
move = stdin.nextLine().charAt(0);;
move = Character.toUpperCase(move);
while(move !='U' && move != 'D' && move != 'L' && move != 'R' )
{
System.out.println("Invalid input. Try again.");
move = stdin.nextLine().charAt(0);
move = Character.toUpperCase(move);
}
您当前的代码没有意义。如果我输入R(例如),这将使程序进入无限循环。因为,鞋面上的所有条件都将评估为真。因此,没有达到要求另一个输入的指令(stdin.nextLine()
)。
答案 1 :(得分:1)
您也可以尝试以下方法(以不同的方式做同样的事情)。
与其他字段声明一起:
private static final String keySet = "uUdDlLrR";
在方法内:
char move = stdin.nextLine().charAt(0);
while (keySet.indexOf(move) == -1) {
System.out.println("Invalid input. Try again.");
move = stdin.nextLine().charAt(0);
}
它只是更具可读性,如果你想修改一组允许的键,几乎不需要改变。
答案 2 :(得分:0)
语法有点奇怪(为什么“while”而不是“if”?....以及为什么要嵌套?)......但基本上你想用'&&'进行测试不是'||'。
英文:如果输入不是A 而输入不是B,则需要错误。如果你做“或”那么它总是会出错,因为其中一个不会是真的。
编辑: 容易犯错误 - 为了风格/清晰度,我建议:
switch (move) {
case 'u': case 'U':
/*up code*/
break;
case 'd'' case 'D':
/*down code*/
break;
case 'l'' case 'L':
/*left code*/
break;
case 'r'' case 'R':
/*right code*/
break;
default:
System.out.println("Invalid input. Try again.");
break;
}