-1

我有一个名为 DeckPC 的类:

   public class DeckPC {
    // creating 3 cards, composed of one random number from 1 to 7
    private int cardSword = (int)(Math.random() * ((7 - 1) + 1)) + 1;
    private int cardBast = (int)(Math.random() * ((7 - 1) + 1)) + 1;
    private int cardGold = (int)(Math.random() * ((7 - 1) + 1)) + 1;

    static List<Integer> DeckPC = new ArrayList<Integer>(); 

    public void creatingDeck(int cardSword, int cardBast, int cardGold) {
        this.cardSword = cardSword;
        this.cardBast = cardBast;
        this.cardGold = cardGold;

        // trying to add the variables(ints) from above into the DeckPC list.
        DeckPC.add(cardSword);
        DeckPC.add(cardBast);
        DeckPC.add(cardGold);
    }

    public List<Integer> getDeckPC() {  
        return DeckPC;
    }
}

然后是一个带有 main 方法的主类,我想在其中调用 getDeckPC() 以便它显示我插入到 DeckPC 中的值:

DeckPC deckPC = new DeckPC();
deckPC.getDeckPC();

但问题是它根本不会以这种方式返回任何东西。但是,如果我在 createDeck 方法中初始化列表“DeckPC”(没有静态),那么它会返回一个列表,但为空,如下所示:[]。我究竟做错了什么?也许使用了错误的访问修饰符?

4

3 回答 3

2

您需要在调用creatingDeck(...)之前调用getDeckPC(),以便将列表项添加到列表中:

DeckPC deckPC = new DeckPC();
deckPC.creatingDeck(1, 2, 3); ///// ADD this line
deckPC.getDeckPC();

附带说明一下,如果类、成员变量、实例化变量和方法的名称不同,您的代码将更容易调试并避免一些非常难以发现的错误。

于 2019-11-20T20:49:31.453 回答
1

您还没有调用creatingDeck过程来初始化列表的值,您在这里有 2 个选择:

1-您可以通过调用creatingDeck过程并传递一些参数来初始化代码,鉴于您想要一个随机数,这不是一个好主意。

2-您可以像这样使用静态初始化程序:

 public class DeckPC {
    // creating 3 cards, composed of one random number from 1 to 7
    private static int cardSword = (int)(Math.random() * ((7 - 1) + 1)) + 1;
    private static int cardBast = (int)(Math.random() * ((7 - 1) + 1)) + 1;
    private static int cardGold = (int)(Math.random() * ((7 - 1) + 1)) + 1;

    static List<Integer> DeckPC = new ArrayList<Integer>(); 
    static {
        DeckPC.add(cardSword);
        DeckPC.add(cardBast);
        DeckPC.add(cardGold);
      }

    public List<Integer> getDeckPC() {  
        return DeckPC;
    }
}

-static 初始化程序在程序第一次运行时被调用,因为在 Java 中静态变量在程序的整个生命周期中都可用。

-更新:如果您想在每次创建类的新实例时更新值,还有一个实例初始化程序,代码将如下所示:

 public class DeckPC {
    // creating 3 cards, composed of one random number from 1 to 7
    private int cardSword = (int)(Math.random() * ((7 - 1) + 1)) + 1;
    private int cardBast = (int)(Math.random() * ((7 - 1) + 1)) + 1;
    private int cardGold = (int)(Math.random() * ((7 - 1) + 1)) + 1;

    static List<Integer> DeckPC = new ArrayList<Integer>(); 

     {
        DeckPC.add(cardSword);
        DeckPC.add(cardBast);
        DeckPC.add(cardGold);
      }

    public List<Integer> getDeckPC() {  
        return DeckPC;
    }
}
于 2019-11-20T20:57:24.597 回答
0

你应该先调用createDeck方法来填写列表,然后调用getDeckPC()来打印它,或者只是

公共列表 getDeckPC() {
创建甲板(1,2,3); // <----- 在这里调用它 return DeckPC;
}

于 2019-11-20T21:13:52.727 回答