Java 尝试使用其他类中的方法时出现空指针异常
编辑:[已解决]再次感谢--我想我学到了一些关于数组的新知识: 创建对象[]时,something=新对象[int]; 所有内容都指向null,需要明确告知要指向的内容。 浏览了可能的解决方案后,我仍然没有找到问题的答案: 我试图从另一个类调用一个方法,但它似乎没有初始化/实例化。我以为我做了,但显然没有?我一直得到一个NPE 主要方法(countingCards.java): 卡片类别:Java 尝试使用其他类中的方法时出现空指针异常,java,arrays,class,nullpointerexception,Java,Arrays,Class,Nullpointerexception,编辑:[已解决]再次感谢--我想我学到了一些关于数组的新知识: 创建对象[]时,something=新对象[int]; 所有内容都指向null,需要明确告知要指向的内容。 浏览了可能的解决方案后,我仍然没有找到问题的答案: 我试图从另一个类调用一个方法,但它似乎没有初始化/实例化。我以为我做了,但显然没有?我一直得到一个NPE 主要方法(countingCards.java): 卡片类别: public class card { private String value = "hello
public class card {
private String value = "hello";
private String suite = "suiteHello";
// Method to return value
public String getValue() {
return value;
}
// Method to return suite
public String getSuite() {
return suite;
}
// Method to set value
public void setValue(String s) {
value = s;
}
// Method to set suite
public void setSuite(String s) {
suite = s;
}
// Method to test
public void testing() {
value = "test";
System.out.println( value );
}
}
甲板等级:
public class deck {
card[] deckCard = new card[51];
/** Rules for the deck of card.
* 1. You cannot have same value of cards with same suite.
* --- i.e) no two queens of hearts
**/
public void test() {
System.out.println( deckCard.length );
System.out.println( deckCard[1].getValue() );
}
}
我得到的例外是
Exception in thread "main" java.lang.NullPointerException
at deck.test(deck.java:11)
at countingCards.main(countingCards.java:4)
有人知道我的代码是怎么回事吗?
deckCard[1]。getValue()
会引发一个NullPointerException
,因为deckCard
数组的所有51个元素在显式初始化之前都是null
。您需要实际向这个数组添加值,否则它将始终返回null
。尝试创建一个快速for循环,并向其中添加一些随机变量,然后进行尝试
您无法获得最初从未创建过的东西的价值 尚未初始化数组的元素。你的甲板课需要这样的东西
int l = deckCard.length();
for (i = 0; i<l; i++) {
deckCard[i] = new Card();
}
intl=deckCard.length();
对于(i=0;iAn数组不初始化其中的元素。它们最初引用的是null
。鉴于此,您认为deckCard[1].getValue()
有什么作用?此类问题与另一个类中的方法无关。如果执行myobj.mymethod()当myobj为null时,您将在该行代码中得到一个NPE。太棒了,谢谢。所以我只是做了一堆null指针,实际上没有对它们做任何处理。请不要在标题中标记您的问题已解决。相反,您应该鼓励将有助于您的注释转换为答案并接受它。明白了。我认为这会对您有所帮助ul告诉其他人这个问题已经解决了,以防有人在寻找类似问题的快速而肮脏的答案,但我不会这么做。不过我接受了Vannens的答案。是的,我只是添加了大量for循环,将每张卡初始化为各自的值(Ace、2、3、4…等等)。再次感谢!不需要大量for循环。您可以创建两个具有值(1-13)和套件(heart,blabla..)的数组。然后,使用嵌套循环,您可以选择一个值和套件并创建一张卡():deckCard[i]=新卡(值,套件);谢谢——上面这个评论的人的回答和你的一样;我是个白痴。再次感谢!没问题。我们都从某个地方开始,不是白痴,只是还在学习诀窍!就像我在某些方面一样!
int l = deckCard.length();
for (i = 0; i<l; i++) {
deckCard[i] = new Card();
}