有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字符比较不起作用

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

  1. # 1 楼答案

    语法有点奇怪(为什么是“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;
    }
    
  2. # 2 楼答案

    您也可以尝试以下方法(以不同的方式执行相同的操作)

    与其他字段声明一起:

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

    它的可读性更高,如果您希望修改允许的键集,则只需要很少的更改

  3. # 3 楼答案

    试试这个:

    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(例如),这将使程序进入无限循环。因为,上面while上的所有条件都将计算为true。因此,没有到达要求另一个输入的指令(stdin.nextLine()