Java 在存储到数组中时跳过一个值
有人能帮我查一下吗 错误:Java 在存储到数组中时跳过一个值,java,arrays,class,Java,Arrays,Class,有人能帮我查一下吗 错误: java.lang.NullPointerException 如何删除此错误 我的主要班级: public class deck { public static void main(String[] args) { Deck app = new Deck(); app.Deck(); } } 我的甲板班: public class Deck { public int TOTALCARDS;
java.lang.NullPointerException
如何删除此错误
我的主要班级:
public class deck {
public static void main(String[] args) {
Deck app = new Deck();
app.Deck();
}
}
我的甲板班:
public class Deck {
public int TOTALCARDS;
Card[] d;
public int nH;
public void createDeck() {
String[] suitsArray = new String[4];
for(int i=0; i<numArray.length; i++) {
numArray[i] = i+1;
}
for (int i=0; i<13; i++) {
if (i!=11){
deck[i+25] = new Card(suitsArray[2], i+1);
}
else if(i > 10){
deck[i+25] = new Card(suitsArray[2], i+1);
}
}
for (int i=0; i<13; i++) {
deck[i+25].display();
}
}
公共类甲板{
公共信用卡;
卡片[]d;
新罕布什尔州公共交通局;
公共void createDeck(){
字符串[]suitsArray=新字符串[4];
对于(inti=0;iEDIT):您的卡大小是51…应该是52
if (i!=11){
deck[i+25] = new Card(suitsArray[2], i+1);
}
else if(i > 11){
deck[i+25] = new Card(suitsArray[2], i+1);
}
这不符合逻辑,如果i=11,你什么也不做怎么办
i!=11 = false and i > 11 == false;
这意味着else if(i>11)将永远不会执行。
你的代码也做了同样的事情
如果您试图初始化所有52张卡,您可以执行以下操作:
for (int i=0;i<deck.size;i++) {
deck[i] = new Card(suitsArray[i/13], numArray[i % 13]);
这是因为您在数据组[11]中的值为空,因为您跳过了在该索引中放置卡的实例
编辑:[应该是deck[i+25]]
,其中i=11
关于指向变量单词为空的答案是NPE的原因。我对此表示怀疑。我在我的机器中尝试了该代码,但它没有给我NPE。(另请参见)编辑:请参见下面Kick Buttowski的评论,这充其量只是部分答案
您正在调用Card.display()
问题在于:
public String getTitle(){
String displayTitle = suit + words; // <-- Problem
if (number == 1){
words = " Ace";
}
// ...
或者,由于(据我们所知)单词
仅在display()
中使用,请将其移到此处:
public void display() {
String words = ""; // Still need to be initialised
// ...
你能给出异常回溯吗,它非常有用。回溯会给出一个行号…这将是非常好的,因为我在你发布的内容中看不到空指针的空间。另外,这是你在哪里/如何声明deck
?你似乎遗漏了相关的代码。这里没有足够的信息告诉NPE可以在哪里发布我的直觉是它来自于你的卡
构造函数,但我不能确定。这里没有任何东西会导致NPE(前提是卡组
是实际实例化的)@KickButtowski:毫无疑问。但在我们得到答案之前,这个问题是完全无法回答的。我很抱歉代码不清楚,因为我是第一次问关于stackoverflow的问题。为什么你的文章的第一个代码片段没有加起来?你能解释一下吗?我正试图忽略心后。正如我的任务告诉我的那样。我把这个代码放在第二部分尝试帮助跳过该值。@FrezzeyTsuna您可以同时发布您的驱动程序类吗?@FrezzeyTsuna您是否在此处发布了甲板类的完整代码?此答案的哪一部分解决了NPE?您可以通过声明默认为空字符串的words
修复此问题public string words=“”
。我想你应该在你的答案中加上这一点。我真的怀疑这是答案。我从来没有听到过字符串抛出nullpointerexception@KickButtowski你说得对,null
字符串如果只是级联的话就不会有问题。虽然这可能是预期的行为,但事实并非如此。但是代码是if(i!=11){…}else if(i>10){…}
。当i=11时,else分支被输入,并且它确实在deck[i+25]
.hmmm中创建了一张卡。原始条件是如果(i>11)。(请参见KevH的答案)是的,通过编辑,它看起来好像更改了几次
for (int i=0, j=0;j<deck.length;i++) {
if ((i/13) == 2 && (i%13) == 11)
continue;
deck[j++] = new Card( suitsArray[i/13], (i % 13));
}
public String getTitle() {
return suit + " " + titles[number];
}
for (int i=0; i<13; i++) {
deck[i+25].display();
}
public void display(){
System.out.println("< " + getTitle() + " >");
}
public String getTitle(){
String displayTitle = suit + words; // <-- Problem
if (number == 1){
words = " Ace";
}
// ...
public class Card {
// ...
String words = "";
public void display() {
String words = ""; // Still need to be initialised
// ...