2016-04-29 4 views
1

私はJavaFXを使用してシュートとはしごゲームを作成しています。Javafxシュートとはしごのプレイヤーとピースを作成する

私が現在取り組んでいるのは、ユーザーが何人の選手を選んだら、実行する方法でエラーが発生します。

私はデバッガで実行しましたが、どの行が問題なのかを知っていますが、ここからどこに行くのか分かりません。

例外がある:

例外スレッドの "JavaFXのアプリケーションスレッド" java.lang.ArrayIndexOutOfBoundsException:0

Iは、Iが4にprivate Players [] players = new Players[0];ゼロを変更することを見出しましたできます。私は長さ0でそして、あなたはnumOfPlayersまで0からの要素を反復しているループで配列として0

public class Main extends Application { 
private final int BOARD_DIM = 10; 
private Players [] players = new Players[0]; 
private Circle [] c = new Circle[0]; 

public static void main(String[]args){ 
    launch(); 
} 

public void start(Stage pStage) throws Exception{ 
    //ROOT PANE 
    BorderPane root = new BorderPane(); 

    //MENUBAR 

    //BOARD CREATION 

    //PLAYER SELECTION/RESUME PREVIOUS GAME 
    //Drop down menu 
    HBox players = new HBox(); 
    Label intro = new Label("Select # of players"); 
    ChoiceBox<String> p = new ChoiceBox<>(); 
    p.getItems().addAll("2","3","4"); 
    p.setPadding(new Insets(6)); 
    //Button to start new game 
    Button startGame = new Button("Start Game"); 
    startGame.setOnAction(e -> getChoice(p)); 
    startGame.setPadding(new Insets(10)); 
    players.getChildren().addAll(intro,p,startGame); 
    root.setRight(players); 

    Scene scene = new Scene(root, 900, 650); 
    pStage.setTitle("Chutes and Ladders"); 
    pStage.setScene(scene); 
    pStage.show(); 
} 
private void getChoice(ChoiceBox<String> p) { 
    int numOfPlayers = Integer.parseInt(p.getValue()); 
    for(int i = 0; i < numOfPlayers; i++){ 
     players[i] = new Players("p"+(i+1),9,0, false); 
     c[i] = new Circle(25); 
    } 
    c[0].setFill(Color.GREEN); 
    c[1].setFill(Color.YELLOW); 
    if(numOfPlayers >= 3){ 
     c[2].setFill(Color.RED); 
     } 
     if(numOfPlayers == 4){ 
      c[3].setFill(Color.BLACK); 
     } 
} 
+0

実際のエラー/例外は何ですか? – dejuknow

答えて

0

private Circle [] c = new Circle[0];にあなたがinitalizingている選手とCを変更しようとした場合しかし、私は別のエラーを取得します。それが例外を引き起こす原因です。

まずは自分の配列を宣言:

private Players [] players; 
private Circle [] c; 

次に、あなたの方法では、あなたは(あなたは長さを変更する必要がある場合は、後で私がのArrayListに切り替えることを示唆している)必要な長さの配列をinitalize。

private void getChoice(ChoiceBox<String> p) { 
    int numOfPlayers = Integer.parseInt(p.getValue()); 
    c = new Circle[numOfPlayers];   //add these lines 
    players = new Players[numOfPlayers];  //add these lines 
    for(int i = 0; i < numOfPlayers; i++){ 
     players[i] = new Players("p"+(i+1),9,0, false); 
     c[i] = new Circle(25); 
    } 
    ... 
} 
関連する問題