我正在写一个java视频扑克游戏。当我运行测试文件时,我得到nullpointexception错误。它指向我的改组方法中的这一行theDeck[i] = theDeck[j];
我还是java的新手...
import java.util.Random;
public class Deck {
private Card[] theDeck;
private int top;
// add more instance variables if needed
public Deck(){
top = 0;
Card[] theDeck = new Card[52];
for(int s = 1; s <= 4; s++)
{
for (int v = 1; v <= 13; v++)
{
for (int i = 0; i < theDeck.length; i++)
{
theDeck[i] = new Card(s,v);
}
}
}
}
public void shuffle()
{
// shuffle the deck here
Random generator = new Random();
int i;
int j;
i = generator.nextInt(51) + 1;
j = generator.nextInt(51) + 1;
Card temp = theDeck[i];
for(int k = 1; k <100; k++)
{
theDeck[i] = theDeck[j];
theDeck[j] = temp;
}
top = 0;
}
这是调用shuffle
方法的类的一部分:
public void play()
{
cards.shuffle();
for( int i =1; i <= 5; i++)
{
p.addCard(cards.deal());
cards.incrementTop();
}
for( int j = 1; j < 5; j++)
{
p.getHand().get(j).toString();
}
System.out.println("These are your cards:");
for( Card c : p.getHand())
{
答案 0 :(得分:0)
您在构造函数中引用了错误的theDeck
数组。
在你的构造函数中,
private Card[] theDeck; // Your constructor is not referring to this!
private int top;
// add more instance variables if needed
public Deck(){
top = 0;
Card[] theDeck = new Card[52]; // You defined a local theDeck variable!
for(int s = 1; s <= 4; s++)
{
for (int v = 1; v <= 13; v++)
{
for (int i = 0; i < theDeck.length; i++)
{
theDeck[i] = new Card(s,v);
}
}
}
}
看看那里发生了什么?因此,您创建了另一个,而不是指向类字段theDeck
的构造函数。所以你应该做的就是从那一行中删除Card[]
,以便你的构造函数指向该字段,而不是创建一个局部变量。
这有意义吗?发表评论,以便我可以进一步帮助你。
我还建议您使用this
关键字来引用您的字段。这有助于避免混淆。有关this
关键字的更多信息,请参阅此link。
答案 1 :(得分:0)
将Card[] theDeck = new Card[52];
更改为theDeck = new Card[52];
您已经在类中声明了theDeck,在构造函数中再次声明它会将theDeck
的范围缩小到构造函数中。还有,循环
for(int k = 1; k <100; k++)
{
theDeck[i] = theDeck[j];
theDeck[j] = temp;
}
似乎没有对索引k
做任何事情。
Collections API中已经有一个shuffle方法。
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html