2015-01-21 39 views
0

这个程序只是一本java书籍的解释程序。然而,在我编译并运行该程序后,出现运行时错误。我是java编程的新手。 的代码如下:简单java编程的运行时错误nullpointerexception

class GuessGame{ 
    Player p1; 
    Player p2; 
    Player p3; 
    public void startgame(){ 
    p1=new Player();  
    p1=new Player(); 
    p1=new Player(); 
    int guessp1=0; 
    int guessp2=0; 
    int guessp3=0; 
    boolean p1isRight=false; 
    boolean p2isRight=false; 
    boolean p3isRight=false; 
    int targetNumber= (int) (Math.random() * 10); 
    System.out.println("Ï am thinking of a number between 0 and 9"); 
    while(true){ 
    p1.guess(); 
    p2.guess(); 
    p3.guess(); 
    guessp1=p1.number; 
    System.out.println("Player 1 guessed " +guessp1); 
    guessp2=p2.number; 
    System.out.println("Player 2 guessed " +guessp2); 
    guessp3=p3.number; 
    System.out.println("Player 3 guessed " +guessp3); 
    if(guessp1==targetNumber) 
     p1isRight=true; 
    if(guessp2==targetNumber) 
     p2isRight=true; 
    if(guessp3==targetNumber) 
     p3isRight=true; 
    if(p1isRight || p2isRight || p3isRight){ 
     System.out.println("We have a winner!!"); 
     System.out.println("Player 1 got it right ?" +p1isRight); 
     System.out.println("Player 2 got it right ?" +p2isRight); 
     System.out.println("Player 3 got it right ?" +p3isRight); 
     System.out.println("Game Over"); 
     break; 
    } 
    else{ 
     System.out.println("Players will have to try again"); 
    } 
    } 
    } 
} 

class Player{ 
    int number=0; 
    public void guess(){ 
     number= (int) (Math.random() * 10); 
     System.out.println("Ï am guessing " +number); 
    } 
} 

public class GameLauncher{ 
    public static void main(String [] args){ 
    GuessGame game=new GuessGame(); 
    game.startgame(); 
    } 
} 

我得到的错误是:

? am thinking of a number between 0 and 9 
? am guessing 0 
Exception in thread "main" java.lang.NullPointerException 
     at GuessGame.startgame(GameLauncher.java:19) 
     at GameLauncher.main(GameLauncher.java:59) 
+1

的可能重复[什么是空指针异常,以及如何解决这个问题?( http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – 2015-01-21 06:30:55

+1

@JANNU你应该学会使用调试器。 – Biffen 2015-01-21 06:33:43

回答

3

前三行的startgame()

p1=new Player();  
p1=new Player(); 
p1=new Player(); 

而应该是

p1=new Player(); 
p2=new Player(); 
p3=new Player(); 

否则p2(和更高版本p3)是null当您尝试并访问它时。

+0

啊打错了。但我确实知道为什么我得到了NullPointerException,所以这很好。我发现的另一个问题是System.out.println命令打印“?”而不是“我”。 – JANNU 2015-01-21 06:47:29

1

p2 and p3从来没有初始化。一定是一个愚蠢的错误,你已经做出了。

请初始化变量。

p1=new Player();  
p2=new Player(); 
p3=new Player(); 
1

你做了错误,同时启动对象

 p1=new Player();  
     p1=new Player(); 
     p1=new Player(); 

更正代码:

 p1=new Player();  
     p2=new Player(); 
     p3=new Player();