0

Java で作成したクラスがあり、メソッドの 1 つは getCommand() です。このメソッドの目的は、文字列を読み取り、ユーザーが入力したものが許容可能なコマンドと一致するかどうかを確認することです。

これは私が最初に書いた方法です:

public char getCommand(){


    System.out.println("Input command: ");
     command = input.nextLine();

    while(command.length() != 1){
        System.out.println("Please re-enter input as one character: ");
        command = input.nextLine();
    }

    while(  command.substring(0) != "e" ||
            command.substring(0) != "c" || 
            command.substring(0) != "s" ||
            command.substring(0) != "r" ||
            command.substring(0) != "l" ||
            command.substring(0) != "u" ||
            command.substring(0) != "d" ||
            command.substring(0) != "k" ||
            command.substring(0) != "f" ||
            command.substring(0) != "t" ||
            command.substring(0) != "p" ||
            command.substring(0) != "m" ||
            command.substring(0) != "q"){
        System.out.println("Please enter a valid character: ");
        command = input.nextLine();
    }

    fCommand = command.charAt(0);

    return fCommand;

}

さて、これの問題は、OR 演算子を使用しているため、入力した文字が常にそれらのいずれかと等しくないため、そのループをエスケープしないことです。AND演算子に変更してみましたが、同じ問題です。これらの特定の文字のみを受け入れる最良の方法は何でしょうか? とても有難い。

4

2 に答える 2

2

あなたの論理は正しくありません。OR ではなく論理 AND を使用する必要があります。また、文字を比較するcharAt()代わりに使用したいと思います。substring()

つまり、

while(  command.charAt(0) != 'e' &&
        command.charAt(0) != 'c' && 
        command.charAt(0) != 's' &&
        ...)

それ以外の場合は、実際の 1 文字の文字列入力をテストする場合は、文字列の等価性を使用して確認してください。

while(  !command.equals("e") &&
        !command.equals("c") &&
        !command.equals("s") &&
        ...)
于 2010-09-20T00:35:12.187 に答える
0

コマンドを定数として (個別に) 定義する必要があります。このように値をハードコーディングすると、将来コードを更新するのが難しくなります。

プログラムが単なる概念実証または宿題である場合は、次を使用します。

private static final String COMMANDS = "ecsrludkftpmq";

while(!COMMANDS.contains(command.getChar(0)) {
  System.out.println("Please enter a valid character: ");
  command = input.nextLine();
}

それ以外の場合、これが製品コードである場合は、単純な Command(char) クラスを作成し、個々のコマンド定数をコレクション (おそらく Character キーに対する Map) の一部として提供することを検討します。これは、一致するコマンドが含まれているかどうかをテストできます。

于 2010-09-20T00:47:55.533 に答える