2013-03-17 12 views
1

喜即時得到這個錯誤味精,我需要幫助線程「main」java.lang.NullPointerExceptionat板中的異常。在<init>(Board.java:23)在PiratesDriver.main(PiratesDriver.java:14)

Exception in thread "main" java.lang.NullPointerException 
at Board.<init>(Board.java:23) 
at PiratesDriver.main(PiratesDriver.java:14) 

我的代碼是

import java.util.Scanner; 
import java.util.Random; 
public class Board { 
private final int SIZE=30; 
private final int NUM_PLAYERS=2; 
**private int diffLevel;** 
private Player[] players= new Player[NUM_PLAYERS]; 
private char[] hurdles=new char[SIZE]; 

public Board() { 
    System.out.println("|||||||||||||||||||||||||||||||||||||||||||||"+"\n||||||||||||||||||||START||||||||||||||||||||\n"+"|||||||||||||||||||||||||||||||||||||||||||||"); 
    System.out.print("Enter Diffculty Level for the Game (0=easy, 1=50/50 i.e. not too easy, not too hard, 2=HARD):"); 
    **SetDifficulty();** 
    System.out.println(""); 
    players[0].SetName(GetPlayerName(0)); 
    System.out.println(""); 
    players[1].SetName(GetPlayerName(1)); 
    DisplayPlayerDetails(); 
    System.out.println(""); 
    System.out.println("<<<--GAME BOARD LEGEND-->>>"); 
    System.out.println("e = This cell contains an easy enemy pirate."); 
    System.out.println("t = This cell contains a treasure island."); 
    System.out.println("a = This cell contains an abandoned ship."); 
    System.out.println("m = This cell contains a mystery island."); 
    System.out.println("j = This cell contains a magic chamber."); 
    System.out.println(",P = This cell has a player in it."); 
    System.out.println("<<<------- ----- ------->>> "); 
    System.out.println(""); 
    SetHurdles(); 
    DisplayBoard(); 
} 

**void SetDifficulty(){ 
    Scanner scan= new Scanner(System.in); 

    boolean invalid = true; 
    diffLevel= scan.nextInt(); 
    while (!((diffLevel <=2) && (diffLevel>=0))){ 
     System.out.println("Error, please enter a valid value"); 
     diffLevel= scan.nextInt();** 


    } 

} 
public String GetPlayerName(int index){ 
    Scanner scan= new Scanner(System.in); 
    System.out.print("Enter Player "+(index+1)+"'s Name: "); 
    String playername= scan.nextLine(); 
    System.out.println(playername+" has no Voodoo doll."); 
    System.out.println(playername+" does not have a Ship."); 
    return playername; 
} 
public void DisplayPlayerDetails(){ 
    System.out.println("------------- PLAYER DETAILS -------------"); 
    for (int i=0;i<players.length;i++){ 
     System.out.println("-->Player "+(i+1)+"<--"); 
     System.out.println("Name: "+players[i].GetName()); 
     System.out.println("Health: "+players[i].GetHealth()+" potions"); 
     System.out.println("Treasure: "+players[i].GetWealth()+" gold coins"); 
     System.out.println("Weapon: "+players[i].WeaponName(players[i].GetWeapon())); 
     System.out.println("Voodoo Doll: "+players[i].GetVoodoo()); 
     System.out.println("Ship: "+players[i].GetShip()); 
     System.out.println("Position: "+(players[i].GetPosition()+1)); 
     System.out.println("  ------><------"); 
    } 
    System.out.println("---------------------------------------------"); 

} 
public void SetHurdles(){ 
    Random randNumGenerator = new Random(); 
    boolean bool=true; 
    int rand; 
    int e,h,t,a,m,j; 
    if (diffLevel==0){ 
     e=12; 
     h=0; 
     } 
    else if (diffLevel==1){ 
     e=6; 
     h=6; 
    } 
    else { 
     h=12; 
     e=0; 
    } 
    t=6; 
    a=6; 
    m=3; 
    j=3; 
    for (int i=0;i<hurdles.length;i++){ 

     while(bool){ 
      rand=randNumGenerator.nextInt(6); 
      if (rand==0&& e!=0){ 
       hurdles[i]='e'; 
       e--; 
       bool=false; 
      } 
      else if (rand==1&& h!=0){ 
       hurdles[i]='h'; 
       h--; 
       bool=false; 
      } 
      else if (rand==2&& t!=0){ 
       hurdles[i]='t'; 
       t--; 
       bool=false; 
      } 
      else if (rand==3&& a!=0){ 
       hurdles[i]='a'; 
       a--; 
       bool=false; 
      } 
      else if (rand==4&& m!=0){ 
       hurdles[i]='m'; 
       m--; 
       bool=false; 
      } 
      else if (rand==5&& j!=0){ 
       hurdles[i]='j'; 
       j--; 
       bool=false; 
      } 
      bool=true; 
     } 
    } 

    } 
    public void DisplayBoard(){ 
     System.out.println("---------------------------------------------"); 
     System.out.println("********PIRATES OF 125 GAME BOARD********"); 
     for (int i=0;i<5;i++){ 
      if ((players[0].GetPosition()==i)||(players[1].GetPosition()==i)) 
       System.out.print((i+1)+": "+hurdles[i]+"P"); 
      else 
       System.out.print((i+1)+": "+hurdles[i]); 
     } 
     System.out.println(""); 
     for (int i=5;i<10;i++){ 
      if ((players[0].GetPosition()==i)||(players[1].GetPosition()==i)) 
       System.out.print((i+1)+": "+hurdles[i]+"P"); 
      else 
      System.out.print((i+1)+": "+hurdles[i]); 
     } 
     System.out.println(""); 
     for (int i=10;i<15;i++){ 
      if ((players[0].GetPosition()==i)||(players[1].GetPosition()==i)) 
       System.out.print((i+1)+": "+hurdles[i]+"P"); 
      else 
      System.out.print((i+1)+": "+hurdles[i]); 
     } 
     System.out.println(""); 
     for (int i=15;i<20;i++){ 
      if ((players[0].GetPosition()==i)||(players[1].GetPosition()==i)) 
       System.out.print((i+1)+": "+hurdles[i]+"P"); 
      else 
      System.out.print((i+1)+": "+hurdles[i]); 
     } 
     System.out.println(""); 
     for (int i=20;i<25;i++){ 
      if ((players[0].GetPosition()==i)||(players[1].GetPosition()==i)) 
       System.out.print((i+1)+": "+hurdles[i]+"P"); 
      else 
      System.out.print((i+1)+": "+hurdles[i]); 
     } 
     System.out.println(""); 
     for (int i=25;i<30;i++){ 
      if ((players[0].GetPosition()==i)||(players[1].GetPosition()==i)) 
       System.out.print((i+1)+": "+hurdles[i]+"P"); 
      else 
      System.out.print((i+1)+": "+hurdles[i]); 
     } 
     System.out.println(""); 
     System.out.println("---------------------------------------------"); 
    } 
    public void Play(){ 
     Board game=new Board(); 
     for (int i=0; i<players.length;i++){ 
      DisplayPlayerDetails(); 
      while(players[i].GetPosition()<hurdles.length){ 

      players[i].Move(); 
      if (hurdles[players[i].GetPosition()]=='e'){ 
       EasyPirate e= new EasyPirate(); 

      } 
      } 

     }  
    } 
} 

和我的主要驅動器是

public class PiratesDriver { 

    public static void main(String[] args) { 
Board piratesOf125 = new Board(); //Instantiate a new board 
piratesOf125.Play(); //Play the game 

} 
} 

我一直一個多小時,現在想的東西,我知道這個問題是我的diffLevel爲空或東西,但我只是不能似乎能夠解決它,即時猜測,我必須解決SetDifficulty()原因,這是diffLevel定義的地方。需要幫助請。 哦,第14行是private int diffLevel;

+0

可以突出這個地方拋出異常行? – 2013-03-17 22:55:23

+0

你在哪裏實例化**玩家[0] **和**玩家[1] **?似乎沒有**播放器實例**已被添加到數組中。 – spiritwalker 2013-03-17 22:56:59

+0

我做了異常線粗體,所以他們周圍有**。玩家[0]和玩家[1]處於不同的課程中,因爲它看起來不相關,所以我沒有粘貼 – 2013-03-17 23:06:49

回答

0

players[0] = new Player(); 
players[1] = new Player(); 

上開始,然後使用它。請記住:當您創建數組的新實例時,您可以在單元格中使用空(默認)值創建它。在使用它之前,您必須創建對象的實例。

參見:

相關問題