所以我在努力创造一个游戏。我的main方法调用另一个放在同一文件中的方法。它在测试时运行得非常好,并且由于某种原因它刚停止工作并向我抛出一个NPE。作为序言,我非常绿色(仅在我的Java教科书的第5章)。
以下是我的代码的相关部分。我将信息从我的main方法传递给另一个使用另一种方法进行计算的方法。此方法传递给我的gameboard对象的引用,该对象包含一个字符串。如果我将pushCard方法传递给常量而不是getSlot **方法,那么它可以完美地工作。 NPE是否意味着我引用的newBoard对象已变为null?如果我在调用windAction()之前放置一个System.out.print,它将打印正确的字符串而不是null。我很困惑。
任何帮助或建议都将是一个很大的帮助。提前谢谢。
public static void main (String[] args)
{
switch (playCard)
{
case "wind":
//slotselection has already been given a value
windAction(slotSelection.toUpperCase());
break;
// There is more code here that is not shown...............
}
}
public static void windAction(String slotSelection)
{
switch (slotSelection.toUpperCase())
{
case "A1":
{
if (pushCard(newBoard.getSlotA2(), newBoard.getSlotA3()) == true)
newBoard.setSlotA3(newBoard.getSlotA2());
newBoard.setSlotA2("EMPTY");
if (pushCard(newBoard.getSlotB1, newBoard.getSlotC1) == true)
newBoard.setSlotC1(newBoard.getSlotB1());
newBoard.setSlotB1("EMPTY");
} //end case A1
break;
// There is more code here that is not shown...............
}
}
public static Boolean pushCard(String S1, String S2)
{
Boolean result = null;
if ((S1 == "fire") | (S1 == "water") | (S1 == "wind")){
if ((S2 != "fire") | (S2 != "water") | (S2 != "wind"))
result = true;
else
result = false;
}
return result;
}//end push card method
答案 0 :(得分:2)
我相信NullPointerException可能来自您的pushCard
方法 - >您正在使用布尔类而不是布尔基元,并且有一个可能为空的情况。
您正在使用逐位或操作来检查逻辑,或者您正在使用==检查字符串相等性,这将导致if语句失败,因此将不会设置结果:
Boolean result = null;
if ((S1 == "fire") | (S1 == "water") | (S1 == "wind")){
...
}
应该是:
boolean result = false;
if ("fire".equals(S1) || "water".equals(S1) || "wind".equals(S1)){
...
}
必须对此内部的if语句进行类似的更改。