1

2 次元配列を作成して出力するプログラムを作成する必要があります。そして、この迷路で「キャラクター」を誘導することになっています。だから私はそれを上/下/左/右に動かしたい。ユーザーは、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);
        }}}}
4

3 に答える 3

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 と入力すると、プログラムは無限ループに入ります。したがって、上の while のすべての条件は true と評価されます。したがって、別の入力を要求する命令に到達しません ( stdin.nextLine())。

于 2013-02-11T04:32:42.203 に答える
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);
}

許可されたキーのセットを変更する場合に備えて、もう少し読みやすく、ほとんど変更する必要はありません。

于 2013-02-11T05:15:26.857 に答える
0

構文は少し奇妙です (なぜ「if」ではなく「while」なのですか?...そしてなぜ入れ子になっているのですか?) ... 基本的には「||」ではなく「&&」でテストしたいのです。

英語で: 入力が 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;
}
于 2013-02-11T04:33:08.633 に答える