字符比较不起作用

时间:2013-02-11 04:28:59

标签: java comparison char

我必须编写一个制作二维数组的程序并将其打印出来。然后我应该通过这个迷宫引导一个“角色”。所以我想让它向上/向下/向左/向右移动。允许用户输入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);
        }}}}

3 个答案:

答案 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;
}