2

ここで何が間違っているのかわかりません。しかし、カードを正しいフォーマットに変更したいのです。

たとえば、カード 1c を AC に変更します。

ここに私が遊んでいるいくつかのコードがあります:

public static void main(String[] args) {

    String[] cards = {"1c", "13s"};

    for (String card : cards) {

        switch (card.toUpperCase()) {
            case "1C":
                card = card.toUpperCase().replace("1C", "AC");
                break;
            case "13S":
                card = card.toUpperCase().replace("13S", "KS");
                break;
            default:
                System.out.println(Arrays.toString(cards));
        }
    }
    System.out.println(Arrays.toString(cards));

}

どんな助けでも大歓声です。

4

4 に答える 4

6

ループ内では、cardは単なるローカル変数であり、再割り当てしても配列は変更されませんcards。当面の修正は、配列にインデックスを付けて、各要素を直接参照できるようにすることです。

for (int i = 0; i < cards.length; i++) {
    switch (cards[i].toUpperCase()) {
        case "1C":
            cards[i] = cards[i].toUpperCase().replace("1C", "AC");
            break;
        case "13S":
            cards[i] = cards[i].toUpperCase().replace("13S", "KS");
            break;
        default:
            System.out.println(Arrays.toString(cards));
    }
}

編集: edhedges のコメントに答えるには、拡張 for 構文を使用し続けるために、カウンター変数をループの外に保持する必要があります。

int i = 0;
for (String card : cards) {
    switch (card.toUpperCase()) {
        case "1C":
            cards[i] = card.toUpperCase().replace("1C", "AC");
            break;
        case "13S":
            cards[i] = card.toUpperCase().replace("13S", "KS");
            break;
        default:
            System.out.println(Arrays.toString(cards));
    }
    i++;
}
于 2012-08-05T05:55:56.490 に答える
0

@Paul Borella の回答に加えて、これは Java 7 でのみ可能であると言えます。Switch ステートメントでは String を式として使用できません。したがって、次の行でコンパイルエラーが発生するはずです

switch(card.toUpperCase())

同じ機能を実現したい場合は、列挙型を使用できます。

public enum Cards {
 1C, 13S;

   public String replacedString(){
     case 1C : return "AC";
               break;

     case 13S : return "KS";
                break;

     default : return "";
   }    
}
于 2012-08-05T06:22:23.530 に答える
0

次のコードでこれを行うことができます

public static void main(String[] args) {

    String[] cards = {"1c", "13s"};

    for (int i = 0 ; i < cards.length ; i++) {

        switch (card[i].toUpperCase()) {
            case "1C":
                cards[i] = cards[i].toUpperCase().replace("1C", "AC");
                break;
            case "13S":
                cards[i] = cards[i].toUpperCase().replace("13S", "KS");
                break;
            default:
                System.out.println(Arrays.toString(cards));
        }
    }
    System.out.println(Arrays.toString(cards));

}
于 2012-08-05T05:59:55.070 に答える
0

Java 7 を使用していますか? そうでない場合は、Strings in cases を使用できません。

この問題ここを参照してください(下にスクロールして、switch ステートメントでの文字列の使用)

于 2012-08-05T05:54:32.620 に答える