2

私はテキスト ベースの RPG ゲームを作成しており、chooseClass メソッドを作成しています。コードを参照してください。

public static void classChoice(){
    String cont =null;
    String[] classes = {"rogue", "wizard", "knight", "archer"};
    Scanner input = new Scanner(System.in);
    do{
        System.out.println("Choose your class (Rogue, Wizard, Knight, Archer): ");
        cont = input.next();
        if (cont.equalsIgnoreCase("rogue")){
            System.out.println("You have chosen the Rogue!");
        } else if (cont.equalsIgnoreCase("wizard")) {
            System.out.println("You have chosen the Wizard!");
        } else if (cont.equalsIgnoreCase("knight")) {
            System.out.println("You have chosen the Knight!");
        } else if (cont.equalsIgnoreCase("archer")) {
            System.out.println("You have chosen the Archer!");
        } else {
            System.out.println("Choose a valid class!");
        } 
    } while(!cont.equals(classes));
}

そこで、すべてのクラスの文字列配列を作成し、ユーザーに「cont」と入力させて、「class」配列の値のいずれとも等しくないことを伝え、「Choose a有効なクラス!". うまくいきません。アイデアはありますか?

4

8 に答える 8

10

cont.equals(classes)contにあるかどうかはテストしませんclassescontが と等しいかどうかをテストしclassesます。contは文字列であり、文字列の配列であるためclasses、これは決して真ではありません。

Arrays.asListクラスのリストを作成するために使用することをお勧めします。次に、リストに以下が含まれているかどうかをテストできますcont

classes = Arrays.asList("rogue", "wizard", "knight", "archer");

... while (!classes.contains(cont));
于 2013-08-25T00:30:55.583 に答える
4

この目的には列挙型を使用する必要があります。入力文字列の列挙型を返すメソッドがあり、値が何であるかを知ることができます。

于 2013-08-25T00:28:32.010 に答える
2

単一の文字列を文字列の配列と比較することはできません。このロジックの正しい考え方は、「有効なクラスのセットには、ユーザーが入力したものが含まれているか?」というものです。それがどのように見えるかの小さなスニペットは次のとおりです。

Set<String> classes = new HashSet<String>(Arrays.asList("Rogue", "Wizard")); // ...etc.
while (!classes.contains(cont));
于 2013-08-25T00:32:54.337 に答える
2

contは でStringありclassesString[](文字列配列) であるため、それらが等しくなることはありません。あなたが知りたいのは if classescontainscontです。List<String>メソッドを使用できるように、クラスを a に変更することをお勧めしますcontains

final List<String> CLASSES = Arrays.asList("rogue", "wizard", "knight", "archer");

その後

while(!CLASSES.contains(cont));

とはいえ、変数名と一般的な設計には多少の作業が必要になる可能性があります。まずcont、 のようなわかりやすい名前を付ける必要がありますuserClassChoice

于 2013-08-25T00:35:33.027 に答える
2

実際に配列が必要かどうかはわかりませんが、必要であると仮定しましょう:

String[] classes = {"rogue", "wizard", "knight", "archer"};
List<String> list = Arrays.asList(classes);
    Scanner input = new Scanner(System.in);
do (
    System.out.println("Choose your class (Rogue, Wizard, Knight, Archer): ");
    cont = input.next();
} while (!list.contains(cont.toLowerCase()))

あなたはそれを改良することができますが、これは機能するものの基本です.

于 2013-08-25T00:36:56.220 に答える
1

これは、cont 値が配列内にあるかどうかを確認します。

 while (!classes.asList("rogue", "wizard", "knight", "archer").contains(cont))

文字列 cont を配列クラスと比較しようとしています。

于 2013-08-25T00:30:54.070 に答える
1

while ブロックのステートメントが正しくありません。con を classes 配列と比較するべきではありません

于 2013-08-25T00:31:41.187 に答える