gpt4 book ai didi

java - NullPointerException,研究了也找不到原因

转载 作者:行者123 更新时间:2023-11-29 09:52:15 27 4
gpt4 key购买 nike

我在用 Java 创建典型的卡片/套牌类时遇到了困难。我读过一些类似的问题和答案,但要么它们不相关/没有帮助,要么我还不能简单地理解它。这是代码

public class Cards {
boolean isAvailable;
int card_id;
static final int AC = 32;
public Cards [] deck = new Cards[AC];

public void set () {
int a = 0;
for (int i = 0; i < AC; i++) {
if(a == 4) a = 0;
deck[i].isAvailable = true; // <---------
deck[i].card_id = i + (a * 101); // <---------
a++;
}
}
public void read () {
for (int i = 0; i < AC; i++)
System.out.println(deck[i].isAvailable + " " + deck[i].card_id);
}
public static void main (String[] args) {
Cards c = new Cards();
c.set();
c.read();
}
}

Exception in thread "main" java.lang.NullPointerException
at Cards.set(Cards.java:13)
at Cards.main(Cards.java:24)

1.我读过类似的问题,发现问题可能出在数组的初始化中,我尝试对我的 prog 做同样的事情,但无论如何它都变坏了。

我标记了第 13 行和第 14 行,因为它们被指向了(当我评论第 13 行只是为了检查时,指针设置到下一行)。

2。我想从您那里获得的下一部分帮助是:即使有 main(用于培训目的),我看到其他类(class)也在使用这个类(class)(它只是创建甲板)所以我想我不需要 main ...除了第一点的概率之外,一切都很好吗?

最佳答案

非常简单:

public Cards [] deck = new Cards[AC];

创建一个数组,其中包含用于卡片对象的 AC 数量的插槽。

现在您必须将一个非空卡片对象放入每个槽中!

但问题是:实际上您的抽象被打破了。

您编写的代码似乎使一张卡片与卡片集相同 - 通过将卡片的数组添加到您的卡片类!这使得很难修复您当前的代码。作为解决此问题的“正常”方法是添加一个构造函数,例如

public Cards() {
deck = new Cards[AC];
for (int i=0; i<deck.length;i++) {
deck[i] = new Cards();
}

如果您尝试这样做...您立即会遇到无休止的递归(创建一个新卡片将导致创建 AC 新卡片(以填充数组);很快就会导致 stackoverflow。

因此真正的答案是沿着这些路线:

public class Card {
... a class that represents a SINGLE card in your game

然后

public card GameOfCards {
... a class that (for example!) uses an array to hold n objects of class Card!

最后,正如 Peter 在他的评论中指出的那样:您应该学会使用调试手段 自己解决此类问题。一种好方法:在使用任何数据结构之前,对其进行迭代并打印出其内容。或者更好的是,学习如何使用调试器,并逐步检查您的代码!你应该明白:这是非常基本的东西;你通常不应该在这里提出。

关于java - NullPointerException,研究了也找不到原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40465664/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com