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

您使用的是 Java 7 吗?如果不是,则不能String在 s 中使用cases。

请参阅此问题此处(向下滚动到在 switch 语句中使用字符串)

于 2012-08-05T05:54:32.620 回答
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

除了@Paul Borella 的回答,我想说这只有在 Java 7 中才有可能。因为 Switch 语句不允许 String 作为表达式。所以你应该在行得到编译错误

switch(card.toUpperCase())

如果您想获得相同的功能,那么您可以选择 Enum。

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 回答