0

次のエラー メッセージが表示されましたが、何が問題なのかよくわかりません。

Exception in thread "main" java.lang.NullPointerException
    at Risk.runTeams(Risk.java:384)
    at Risk.blobRunner(Risk.java:220)
    at Risk.genRunner(Risk.java:207)
    at Risk.main(Risk.java:176)

関連するコードは次のとおりです(コード内のコメントと、関連する実行中にプログラムに入力した入力を介して、エラーメッセージ内の行番号に注意を向けます)

public class Risk
{

...

public static void main (String[]arg) 
{
    String CPUcolor = CPUcolor () ; 
    genRunner (CPUcolor) ; //line 176

...

}

...

public static void genRunner (String CPUcolor) // when this method runs i select 0 and run blob since its my only option. Theres nothing wrong with this method so long as i know, this is only significant because it takes me to blob runner and because another one of our relelvent line numbers apears. 
{
    String[] strats = new String[1] ; 
    strats[0] = "0 - Blob" ;
    int s = chooseStrat (strats) ;
    if (s == 0) blobRunner (CPUcolor) ; // this is line 207 
}

...

public static void blobRunner (String CPUcolor) 
{ 
    System.out.println ("blob Runner") ; int turn = 0 ; boolean gameOver = false ; 
    Dice other = new Dice ("other") ; 
    Dice a1 = new Dice ("a1") ; Dice a2 = new Dice ("a2") ; Dice a3 = new Dice ("a3") ;
    Dice d1 = new Dice ("d1") ; Dice d2 = new Dice ("d2") ; 
    space (5) ; 
    Territory[] board = makeBoard() ; 
    IdiceRoll (other) ; 
    String[] colors = runTeams(CPUcolor) ; //this is line 220 
    Card[] deck = Card.createDeck () ;
    System.out.println (StratUtil.canTurnIn (deck)) ; 

    while (gameOver == false)
    {
        idler (deck) ; 
        board = assignTerri (board, colors) ; 
        checkBoard (board, colors) ; 
    }
} 

...

public static String[] runTeams (String CPUcolor) 
{  
    boolean z = false ; 
    String[] a = new String[6] ; 
    while (z == false) 
    { 
        a = assignTeams () ; 
        printOrder (a) ;
        boolean CPU = false ; 
        for (int i = 0; i<a.length; i++) 
        { 
            if (a[i].equals(CPUcolor)) CPU = true ; //this is line 384
        }
        if (CPU==false) 
        {
            System.out.println ("ERROR YOU NEED TO INCLUDE THE COLOR OF THE CPU IN THE TURN ORDER") ; 
            runTeams (CPUcolor) ;
        }
        System.out.println ("is this turn order correct? (Y/N)") ; 
        String s = getIns () ; 
        while (!((s.equals ("y")) || (s.equals ("Y")) || (s.equals ("n")) || (s.equals ("N")))) 
        {
            System.out.println ("try again") ; 
            s = getIns () ; 
        } 
        if (s.equals ("y") || s.equals ("Y") ) 
        z = true ; 
    } 
    return a ; 
}

...

} // This } closes the class 

Null:pointerException を取得する必要がないと思う理由は、この行では: a[i].equals(CPUcolor)a at index i が文字列を保持し、CPUcolor が文字列であるためです。この時点で、どちらも間違いなく値を持ち、null ではありません。誰が何がうまくいかないのか教えてもらえますか?

4

3 に答える 3

2

メソッドを確認する必要がありますassignTeams()。の一部の値ではia[i]null にする必要があります。CPUcolornullかどうかは問題ではなく、メソッドequalsがそれを処理します。

于 2010-04-16T18:16:27.527 に答える
2

デバッガーを使用してコードをステップ実行し、384 行目にブレークポイントを配置します。これにより、何が問題なのかがわかります。

于 2010-04-16T18:17:40.047 に答える
1

assignTeams() は null エントリの配列を返しています。または、それらの少なくとも 1 つが null です。あなたはそれをチェックする必要があります。コードをデバッグできますか?

于 2010-04-16T18:16:15.920 に答える