2013-05-02 57 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。這意味着你試圖在一個實際上並沒有指向任何東西的引用上調用一個方法。

相關問題