2013-05-02 27 views
0

我目前正在尝试在java中创建一个tic-tac-toe游戏作为大学项目。到目前为止,我所做的只是创建了一个gameBoard方法的框架代码。我已经遇到错误说:什么是NullPointerException?

java.lang.NullPointerException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

我也不确定如何完成项目。我的基本想法是使用gameBoard方法每次打印板。我试图将变量设置为全局变量,以便在玩家移动时我可以改变它们。我该如何做到这一点,我如何解决我收到的错误?任何帮助将不胜感激,这里是我当前的代码:

import javax.swing.JOptionPane; 

public class Assignment5 
{ 

     public static String top1 = " "; 
     public static String top2 = " "; 
     public static String top3 = " "; 
     public static String mid1 = " "; 
     public static String mid2 = " "; 
     public static String mid3 = " "; 
     public static String bot1 = " "; 
     public static String bot2 = " "; 
     public static String bot3 = " "; 

    //Generate the game board 
    public static void gameBoard() 
    { 
    System.out.println("+-----------+"); 
    System.out.println("| " + top1 + " | " + top2 + " | " + top3 + " |"); 
    System.out.println("+-----------+"); 
    System.out.println("| " + mid1 + " | " + mid2 + " | " + mid3 + " |"); 
    System.out.println("+-----------+"); 
    System.out.println("| " + bot1 + " | " + bot2 + " | " + bot3 + " |"); 
    System.out.println("+-----------+"); 
    } 

    public void main(String args[]) 
    { 
    gameBoard(); 
    } 
} 
+1

['java.lang.NullPointerException'](http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html) – 2013-05-02 04:22:15

+0

我不认为这是唯一的一块你正在使用的代码。首先,public static void main(String [] args)其次,你试图访问非静态方法中静态的gameBoard。 – asifsid88 2013-05-02 04:26:34

+1

@ asifsid88看起来像OP从'main'中移除'static'关键字,以便干净地调用'gameboard'方法,但却变成了这个错误。 – 2013-05-02 04:28:27

回答

0

关于空指针异常,它是当应用程序试图在需要对象的情况下使用null时发生的异常。

这里是Java中的相应等级:java.lang.NullPointerException

关于你的代码,我建议你可以你点你的编译错误,你在下面的情况下键入像使用IDE像Eclipse

public void main(String args[]) 

应该

public static void main(String args[]) 
+1

你确定,如果你不给静态它会给编译错误? – SudoRahul 2013-05-02 04:37:17

+1

Java 1.4.2差不多10年前。 – 2013-05-02 04:38:59

+0

这是正确的,我在某个时候删除了“静态”,试图修复一些错误并忘记替换它。现在我已经把它放回去了,代码似乎正在运行。谢谢,应该已经注意到了,我自己。 – 2013-05-02 04:50:52

4

你已经有了一个NPE因为你的类没有一个main(),在它static关键字。看起来,您使用run命令而不是java命令来执行您的代码(使用DrJava的java编译器)。

有其DrJava,这显示了一个误导性的stacktrace每当run来代替的java,对于情况下,如果static关键字未在main()给出的SourceForge的网页上提交了Bug Report


那么如何解决这个问题呢?

您需要提供main()方法的正确签名,如下所示。

public static void main(String args[]) // static keyword required 
+2

看起来不错,但是*什么是NullPointerException?* – 2013-05-02 04:21:23

+0

这里的'NPE'与'OP'发布的这段代码无关。通过提供'main'的正确语法,这个类就可以工作。必须有一些其他的代码,这是给这个例外! – SudoRahul 2013-05-02 04:36:34

+0

确实如此,但OP的标题就是这个问题,所以如果你能回答这个问题会很好。此外,你可以解决像这样的其他非直接相关的问题(注意:我提高了你的答案,因为它可以解决问题)。 – 2013-05-02 04:38:33

0

你可能要代表与数组的数组,你的游戏板,如

String[][] board = {new String[3], new String[3], new String[3]}; 
for(int i = 0; i < board.length; i++) { 
    for(int j = 0; j < board[i].length; j++) { 
     board[i][j] = " "; 
    } 
} 

这样,您就可以打印出董事会的嵌套循环的内容,而不是引用每个元素分别;您还可以更容易地确定板元素的邻接关系(例如,您可以确定是否有人使用循环而不是使用地狱般的if-elseif或switch语句)。

关于您的空指针异常,您发布的代码中没有任何内容应该导致一个;错误必须位于代码的其余部分。

0

当您创建一个变量来保存一个对象,你实际上是在创建一个参考,然后必须分配给声明类型(或子类型)的对象实例。

例如

Car c = new Car(); 

可变c是一个参考,其被分配以指向新创建的对象new Car()

如果你只是说,这在另一方面:

Car c; 

现在你有没有指向任何一个参考。由于它不指向任何东西,它指向空,换句话说它是一个空指针。 null是一个指示虚无的抽象。所以,如果你现在想使用的空指针,如果它包含的东西:

c.drive(); 

现在你会得到一个NullPointerException。这意味着你试图在一个实际上并没有指向任何东西的引用上调用一个方法。

相关问题