【问题标题】:Creating an instance of an array of objects class in Java在 Java 中创建对象类数组的实例
【发布时间】:2014-06-04 23:45:23
【问题描述】:

我是 Java 新手,当我尝试创建 DeckofCards 类的实例时,我的主函数出现错误。 DeckofCards 类应该是“卡片”对象的私有数组。我认为我的问题出在 DeckofCards 类中,出于某种原因,我认为它不是一个数组?也许我创建错了?

我的主要错误是 '(' 或 '[' 预期需要数组,但已找到 DeckofCards

这是我的主要功能:

public static void main(String[] args) {

        Card myCard = new Card(13,1);
        System.out.println(myCard.getSuit());
        System.out.println(myCard);
        DeckofCards myDeck = new DeckofCards;  //error here
        for(int i=0; i<53; i++) {
            System.out.println(myDeck[i]); //second error here
        }
    }

这是我的 DeckofCards 课程:

public class DeckofCards {

    private Card[] deck = new Card[52];

    public DeckofCards(){
        int i = 0;

            for(int s = 1; s<5; s++){
                for(int r = 1; r<14; r++){
            deck[i].rank = r;
            deck[i].suit = s;
            i++;

    }
}
    }
}

如果有人能告诉我我是否遗漏了一些语法或一些很棒的东西!谢谢。

【问题讨论】:

  • “出于某种原因,我认为它不是一个数组” - 好吧,你只是一针见血。使用方法与甲板类中的Card 数组进行交互。
  • new DeckofCards()代替new DeckofCards
  • 注意:要构造一个对象(或实际设置它的参数),您需要调用一个构造函数。构造函数是类的方法(即使您没有明确地编写自己的构造函数,Java 也会为该类提供默认构造函数。)现在您实际上在类中编写了构造函数 (public DeckOfCards()),请看:是一种方法。要在 Java 中调用方法,您需要输入 methodName(arguments)。括号是强制性的,参数不是(例如,您编写的构造函数没有参数)。
  • 有人能解释为什么 System.out.println(myDeck[i]) 返回错误吗? System.out.println(myCard) 返回卡片(例如“黑桃 A”)并且 myDeck[i] 不只是一张卡片吗?

标签: java arrays class initialization instance


【解决方案1】:

错误很明显,myDeck 是单个自定义 Object 而不是数组

DeckofCards myDeck = new DeckofCards();  // parenthesis here
for (int i=0; i<53; i++) {
    System.out.println(myDeck); // no brackets here
}

虽然循环本身应该位于DeckofCards 类的toString 方法中。

【讨论】:

    【解决方案2】:

    你需要调用构造函数:

    DeckofCards myDeck = new DeckofCards(); // note parens!
    

    在 Java 中,括号是必需的。

    在构造函数中,您还需要将数组的每个元素初始化为一个新的Card 对象:

    for(int s = 1; s<5; s++){
        for(int r = 1; r<14; r++){
            deck[i] = new Card();
            deck[i].rank = r;
            deck[i].suit = s;
            i++;
    

    【讨论】:

    • 谢谢特德!你能解释一下为什么 System.out.println(myDeck[i]) 返回错误吗? println(myCard) 打印出卡片值('Four of Clubs'),那么最后一个 for 循环不应该打印出所有卡片的值吗?
    • @Acoustic77 - 变量myDeck 不是数组,因此您不能使用数组下标访问它的一部分。如果要打印牌组中的第 i 张卡片,则需要 DeckofCards 中的 getter 方法(例如:public Card getCard(int i) { return deck[i]; })。那你可以试试System.out.println(myDeck.get(i));
    【解决方案3】:

    替换

    DeckofCards myDeck = new DeckofCards;
    

    DeckofCards myDeck = new DeckofCards();
    

    myDeck 从未被初始化为数组。

    【讨论】:

      【解决方案4】:

      为了遍历 DeckofCards,您需要公开该私有 Card[] 数组。您可以使用 bean 表示法 getCards() 或将数组公开。

          public class DeckofCards {
      
              private Card[] deck = new Card[52];
      
              public DeckofCards(){
                  int i = 0;
      
                      for(int s = 1; s<5; s++){
                          for(int r = 1; r<14; r++){
                      deck[i].rank = r;
                      deck[i].suit = s;
                      i++;
      
              }
            } 
          }
           public Card[] getCards(){
      
                return deck;
      
           }
         }
      

      我可能只是把套牌公开。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 2018-10-11
        相关资源
        最近更新 更多