0

Javaで数値を文字列に割り当てるにはどうすればよいですか? 私はエースからキングまでのカードを使用しています。値 11 を「ジャック」に割り当てて、たとえば「6」と比較できるようにします。何か案は?

4

3 に答える 3

1

HashMap を使用します。

Map<String,Integer> map = new HashMap<>();
map.put("Jack", 11);
于 2013-11-08T21:53:37.937 に答える
0

いくつかのオプションがあります。たとえば、文字列を配列に格納して検索し、インデックスを返すことができます。

List<String> names = new ArrayList<String>();
names.add("ace");
names.add("two");
names.add("three");

int number = names.indexOf("ace");

文字列から数値へのマップを使用してルックアップを行うことができます。これにより、連続していない数値を使用できます。

Map<String,Integer> names = new HashMap<String,Integer>();
names.put("ace", 1);
names.put("jack", 11);
names.put("queen", 12);

int number = names.get("ace");

プロパティで列挙型を使用することもできます。

enum CardValue {
  ACE(1),
  JACK(11),
  QUEEN(12);
  final int value;
  CardValue (int value) { this.value = value; } 
  int getValue () { return value; }
}

int number = Enum.valueOf(CardValue.class, "ace".toUpperCase()).getValue();

または、上記ordinal()で連続している場合に使用できます。

必要に応じてエラー処理を追加します。

ブルート フォース largeifを使用するか、 switch ブロックを使用することもできます (Java 1.7 以降)。

int value (String name) {
    switch (name.toLowerCase()) {
    case "ace": return 1;
    case "jack": return 11;
    case "queen": return 12;
    default: return -1;
}

個人的には、あなたの場合は配列またはマップのアプローチを使用します。コーディングが簡単で、文字列を値に簡単に変換したり、その逆に変換したりできます。また、列挙型手法とは異なり、コンパイル時の型名をユーザー入力文字列に結び付けません (たとえば、別の言語のサポートを追加する場合は困難です)。 .

スイッチ ブロックのコーディングも簡単です。

于 2013-11-08T21:59:22.577 に答える