【问题标题】:Appending two strings to one index in an Array in Java将两个字符串附加到 Java 数组中的一个索引
【发布时间】:2013-07-31 20:21:51
【问题描述】:

我已经按照我现在想要的方式修复了它。如果其他人有同样的问题,我认为这是尝试设置一副牌的最简单和最有效的方法。您可以使用deck[random][0] 和deck[random][1] 中的随机变量挑选出单独的卡片。 感谢所有帮助,这是我的代码:

public class NewDeck {

    public static void main(String[] args) {

        String[] suits = new String[] { "Clubs", "Diamonds", "Spades", "Hearts" };

        String[] faces = new String[] { "Ace", "King", "Queen", "Jack" };

        String[][] deck = new String[suits.length * (faces.length + 9)][2];

        int a = 0;

        for (String y : suits) {

            for (String x : faces) {

                deck[a][0] = x;
                deck[a][1] = y;
                a++;

            }

        }

        for (String y : suits) {

            for (int p = 2; p < 11; p++) {

                deck[a][1] = y;
                String pp = Integer.toString(p);
                deck[a][0] = pp;
                a++;

            }

        }

        for (int p = 0; p < deck.length; p++) {

            System.out.print(deck[p][0] + " of ");
            System.out.println(deck[p][1]);

        }

    }

}

【问题讨论】:

  • 它会给你一个编译错误 - deck.add(suits[suit], faces[face]); ,deck 不是地图实例。
  • 为什么不创建一个具有“Suit”和“Face”两个属性的类Card?这就是 Java 的全部意义所在!
  • @tech-idiot:我在 for 循环中收到错误消息:“长度无法解析或不是字段”并且出现错误 - deck.add(suits[suit], faces[脸]); - 说'表达式的类型必须是一个数组,但被解析为一个列表'

标签: java arrays list for-loop append


【解决方案1】:

可能你需要改变这个

        deck.add(suits[suit], faces[face]);             

        deck.add(suits[suit] + faces[face]);             

因为您的想法是连接列表中的元素并将其添加到甲板列表。

【讨论】:

    【解决方案2】:

    您应该在字符串中添加参数类型并创建一个Pair 类。请注意,泛型需要 1.5 或更高版本的 Java 编译器。

    class Pair {
    
         private final String face;  
         private final String suit;  
    
         Pair(String suit, String face) {
             this.face = face; 
             this.suit = suit;             
         }
         @Override
         public String toString() {
            return "(" + suit + ", " + face + ")";
         }
    }
    

    然后你可以使用这个Pair类如下,使用适当的List方法getsize

    List<Pair> deck = new ArrayList<Pair>();
    
    List<String> suits = new ArrayList<String>();
    suits.add("Hearts");
    suits.add("Diamonds");
    suits.add("Clubs");
    suits.add("Spades");
    
    List<String> faces = new ArrayList<String>();
    faces.add("Ace");
    faces.add("King");
    faces.add("Queen");
    faces.add("Jack");
    
    for(int suit = 0; suit < suits.size(); suit++){
    
        for(int face = 0; face < faces.size(); face++){
    
            deck.add(new Pair(suits.get(suit), faces.get(face)));             
    
        }
    
    }
    

    如果您覆盖PairtoString 方法,您还可以通过System.out.println(deck) 获得您想要的ArrayList 的字符串表示形式。

    【讨论】:

    • 完美运行!但恐怕我不能完全理解你所有的代码,所以我想我可能需要学习更多的java,然后才能开始制作我目前无法做的游戏。但是有了你给我的东西,我也许可以继续做游戏,我想我只能通过尝试以前没有做过的事情来学习。谢谢一百万。
    • 由于泛型仅在 Java 1.5 中引入,因此仍有许多 Java 集合的教程和书籍已经过时。我认为一个好的起点可能是这里(简短并包含更多链接)en.wikipedia.org/wiki/Generics_in_Java。或许可以找到一本不错的最新 Java 书籍?
    【解决方案3】:

    您不能在 List 的一个索引处存储两个值。但是你能做的是

    选项 1
    存储连接的 \string 像

    改变

       deck.add(suits[suit], faces[face]);   
    

       deck.add(suits[suit] + "," + faces[face]);  
    

    然后输出牌组[2] = 花色,脸

    选项 2 将字符串列表更改为对象列表,此对象包含西装和面部的详细信息

    public class Deck {
        private String suit;
        private String face;
    
    // getter and setters;
    }
    

    列表变成

    List<Deck> deck
    

    并将条目添加为

    deck.add(new Deck(suits[suit], faces[face]))
    

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 2021-12-08
      • 2021-09-14
      • 2013-01-04
      • 1970-01-01
      • 2013-08-16
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多