0

I got this error message and I'm not quite sure whats wrong:

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)

Here is the relevant bits of code (i will draw attention to the line numbers within the error message via comments in the code as well as inputs i put into the program while its running where relevant)

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 

The reason i don't think i should be getting a Null:pointerException is because in this line: a[i].equals(CPUcolor) a at index i holds a string and CPUcolor is a string. Both at this point definatly have a value neither is null. Can anyone please tell me whats going wrong?

3 Answers 3

2

you should take a look at the method assignTeams(). for some value of i, a[i] has to be null. it doesn't matter if CPUcolor is null, the method equals handles that.

Sign up to request clarification or add additional context in comments.

3 Comments

you were right a[0] is null. Changing my for statment that compared the two strings so that i started off as 1 fixed the problem
@David - I'm glad you got rid of the exception, but does changing the lower bound of the for loop leave your program working correctly? You really intend to only have 5 teams?
the assign teams method returns an array of strings with a length of 7. The first array is abandoned.
2

Use a debugger and step through your code, place a breakpoint at line 384. That should tell you what's wrong.

Comments

1

assignTeams() is returning an array with null entries. Or at least one of them is null. You should check it. Can you debug the code?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.