アプリ版:「スタンプのみでお礼する」機能のリリースについて

Java: NullPointerException が発生する

今日Javaを始め, ボウリングスコアプログラムを作成しています.
ある程度コーディングしたのですが, 例外が発生して進めません.
原因と解決法がわからず困っています.どなたか回答お願いします

ソース(一部省略):
Game.java
----------
public class Game {
public static void main(String[] args) {
Frame[] frame = new Frame[10];

NullFrame nulframe = new NullFrame();
LastFrame frame10 = new LastFrame();

ArrayList<Frame> frames = new ArrayList<Frame>();
frames.add(nulframe);
for (int i = 1 ; i < 10 ; i++) {
frames.add(frame[i]);
}
frames.add(frame10);

if(args.length >= 1) {
System.out.println("Input Score From: "+args[0]);
fin.makeScoreArray(args[0]);
} else {
for(int i = 1; i < 10 ; i++) {
if (i == 1) {
frame[i].setPrevFrame(nulframe); // エラー発生
} else {
frame[i].setPrevFrame(frame[i-1]);
}
if (i >= 9) {
frame[i].setNextFrame(frame10);
} else {
frame[i].setNextFrame(frame[i+1]); // エラー発生
}
int m = frame[i].getThrowableNum(); // エラー発生
for(int j = 0 ; j < m ; j++) {
if((frame[i].getThrowScore(j)) >= 10) break; // エラー発生
board.display();
}
}
}
}
}

----
Frame.java
----

public class Frame implements FrameScore{
private static final int ONE_MORE = 1;
private static final int TWO_MORE = 2;
private static final int CLOSED = 0;

private static final int THROWNUM = 2;

private int[] score_;
private int ftotal_;
public int total_;

private int status_;

Frame prev_;
Frame next_;

public Frame () {
score_ = new int[2];
score_[0] = -1;
score_[1] = -1;
prev_ = null;
next_ = null;
}
public Frame(int[] score_, int total_, int status_) {
this.score_[0] = score_[0];
this.score_[1] = score_[1];
this.status_ = status_;
this.prev_ = prev_;
this.next_ = next_;
}

public void setPrevFrame(Frame f){
prev_ = f;
}
public void setNextFrame(Frame f){
next_ = f;
}
public int getThrowableNum() {
return THROWNUM;
}

A 回答 (1件)

こんにちは。



Frame[] frame = new Frame[10];
でFrame型の配列を宣言していますが、
宣言のみ(箱だけ用意)しかしていないのでframe[i].・・・とメソッドにアクセスするとNullPointerが発生しているのだと思います。

for (int i = 1 ; i < 10 ; i++) {
frames.add(frame[i]);
}
ここでリストに追加しているframe[i]も全て初期状態ですのでframes.get(1)とかで取り出したFrameクラスもnullになっているはずです。

箱を用意したら実体を格納してあげて下さい。
frame[i] = new Frame();
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!