null pointer exception comparing two strings in java
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 开发者_如何学Gorunner 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?
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.
Use a debugger and step through your code, place a breakpoint at line 384. That should tell you what's wrong.
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?
精彩评论