Java 在与主方法相同的文件中调用方法时发生Nullpointerexception
所以我在胡闹,试图创造一个游戏。我的main方法调用我放在同一文件中的另一个方法。测试时,它工作得非常好,出于某种原因,它停止工作,向我扔了一个NPE。作为前言,我很生疏(只在Java教科书的第5章) 下面是我代码的相关部分。我将信息从我的主方法传递到另一个使用另一个方法进行计算的方法。此方法被传递到包含字符串的my gameboard对象的引用。如果我给pushCard方法传递一个常量,而不是getSlot**方法,那么它工作得很好。NPE是否意味着我引用的newBoard对象已变为null?如果在调用windAction()之前放置System.out.print,它将打印正确的字符串,而不是null。我很困惑 任何帮助或建议都会大有帮助。提前谢谢Java 在与主方法相同的文件中调用方法时发生Nullpointerexception,java,nullpointerexception,java-7,Java,Nullpointerexception,Java 7,所以我在胡闹,试图创造一个游戏。我的main方法调用我放在同一文件中的另一个方法。测试时,它工作得非常好,出于某种原因,它停止工作,向我扔了一个NPE。作为前言,我很生疏(只在Java教科书的第5章) 下面是我代码的相关部分。我将信息从我的主方法传递到另一个使用另一个方法进行计算的方法。此方法被传递到包含字符串的my gameboard对象的引用。如果我给pushCard方法传递一个常量,而不是getSlot**方法,那么它工作得很好。NPE是否意味着我引用的newBoard对象已变为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
我相信NullPointerException可能是由于您的
pushCard
方法->使用的是布尔类而不是布尔基元,并且在某种情况下它可能为null
您正在使用按位or操作检查逻辑or,并且正在使用==检查字符串相等性,这将导致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语句进行类似的更改。哪一行产生了空指针异常>可以添加stacktrace吗?newBoard定义在哪里?您要响应所有这些注释吗?为什么要花这么长时间响应注释?等等,您怎么知道这是OP源的一部分?o、 源文件中声明的最后一个方法是什么<代码>公共静态布尔pushCard(字符串S1,字符串S2)就是它!!感谢您快速准确的回复。你太棒了。@Quilliom我的意思是,既然OP没有发布那部分代码,你到底怎么知道那是问题所在?有根据的猜测。我见过太多这样的拆箱出错的问题。