在Java中执行switch语句时对象未更新

在Java中执行switch语句时对象未更新

不知道我在做什么错。但是我想将卡更改为正确的格式。

例如,给定卡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));

}


任何帮助将是极大的鼓舞。

最佳答案

在循环中,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的评论,为了保持使用增强型语法,需要在循环外保留一个计数器变量:

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++;
}

关于java - 在Java中执行switch语句时对象未更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11814299/

10-09 12:36