java - 找不到空指针异常
问题描述
错误发生在这个类的最后一行,我试图打印牌组中第一张牌的编号,但我不确定为什么。
public class CardTricks {
public static void main (String[] args){
Deck newdeck = new Deck();
newdeck.construct();
newdeck.shuffle();
System.out.println(newdeck.deck[0].Number);
}
}
这是卡片的类,主要目的是为卡片提供套件属性和数字属性。
public class Card {
String Suite;
int Number;
}
这是甲板类,该类中的函数用于创建甲板并对其进行洗牌。
public class Deck {
Card[] deck;
public void construct(){
deck = new Card[52];
String[] possuite = new String[4];
possuite[0] = "Hearts";
possuite[1] = "Diamonds";
possuite[2] = "Clubs";
possuite[3] = "Spades";
int x = 0;
while (x < 4){
String suite = possuite[x];
x++;
int number = 1;
System.out.println(suite);
while (number < 14){
deck[number-1] = new Card();
deck[number-1].Suite = suite;
deck[number-1].Number = number;
number++;
}
}
}
public void shuffle(){
int x;
int y;
int z = 0;
while (z < 10000){
x = (int)(Math.random()*52);
y = (int)(Math.random()*52);
Card a = deck[y];
Card b = deck[x];
deck[x] = a;
deck[y] = b;
z++;
}
}
}
解决方案
您只需填充套牌中的前 13 个位置,并在每次生成新套件时覆盖它们。
你应该做什么:(请注意,我已将 移至x++
底部)
while (x < 4){
String suite = possuite[x];
int number = 1;
System.out.println(suite);
while (number < 14){
int cardPos = (number-1) + (13*x);
deck[cardPos] = new Card();
deck[cardPos].Suite = suite;
deck[cardPos].Number = number;
number++;
}
x++;
推荐阅读
- sql - 使用 orderBy 进行内连接或在其他表上使用 groupBy
- reactjs - 从深度链接重定向时如何检查应用程序是否安装在用户设备中
- python - 使用 tensorflow 的 fit_generator 方法时,在前两批正确产生后,我得到一个奇怪的错误
- python - 在 Python 中的多个 HUGE 列表中查找重复项(比较 2、3、4、5 个列表)
- java - java中基于自定义字段值的订单列表
- python - 神经风格迁移中的平台损失
- python - Numpy 数组的 keras 列表不是预期的大小模型
- mongodb - mockgoose.helper.reset() 不删除数据库
- libreoffice-calc - LibreOffice Calc 下拉列表中每个选项的工具提示功能
- python - 将列表的元素与自然数相乘