- ベストアンサー
ファイルからデータをうまく読み込めません
ファイルからデータを読み込んでクラスに宣言した変数に格納したいのですがうまく出来ません ------------------------------------------ import java.io.*; class date{ public String name; public int ko,su; } public class Helloworld { public static void main(String args[]){ date[] dt = new date[2]; BufferedReader br = new BufferedReader(new FileReader("フルパス")); String line; try{ int i=0; while((line = br.readLine())!=null){ dt[i].ko = dt[i].su = 0; dt[i].name = line; line = br.readLine(); dt[i].ko = Integer.valueOf(line).intValue(); line = br.readLine(); dt[i].su = Integer.valueOf(line).intValue(); System.out.println("名前:" + dt[i].name); System.out.println("国語:" + dt[i].ko); System.out.println("数学:" + dt[i].su); i++; } br.close(); }catch(Exception e){ System.out.println("エラー情報:" + e); } } } -------------------------- 上記のソースで実行すると java.lang.NullPointerException とエラーが出てます FileReadernの部分にカーソルを当てると この要素には接続されたソースも、接続された Javadoc もないため、情報を検出できませんでした と表示されました
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>date[] dt = new date[2]; 上記のコードは、あくまで入れ物をつくるにすぎません。 この時点では dt[0] = null; dt[1] = null; となっています。 従って、dt[0]、dt[1]にdateインスタンスを入れてあげないと nullのままですのでインスタンスがセットされている前提でメソッドを呼び出そうとしてNullPointerが発生しているのではないでしょうか。 ですので、 >date[] dt = new date[2]; こちらの下に dt[0] = new date(); dt[1] = new date(); の2行を足してみては如何でしょう。
その他の回答 (3)
- rollyk
- ベストアンサー率61% (8/13)
date[] dt = new date[2]だと参照型の配列を生成しただけなので 下記の1文で、配列にインスタンスを与えるとうまくいくような。。 while((line = br.readLine())!=null){ dt[i]=new date(); ※ここを追加 dt[i].ko = dt[i].su = 0;
- Hardking
- ベストアンサー率45% (73/160)
オブジェクト配列の初期化ミスです。 国語、算数を0で初期化する直前に dt[i]を初期化する。 ↓ dt[i] = new date(); dt[i].ko = dt[i].su = 0; でOKです。
- neko_noko
- ベストアンサー率45% (146/319)
配列内の要素が初期化されていないためでは? >date[] dt = new date[2]; ここで、配列dt[]を初期化していますが、 配列内の各要素dt[0]、dt[1]の2つを初期化している所が存在していません。 なので、dt[i]はnullのままであり、 >dt[i].ko = dt[i].su = 0; ここで、NullPointerExceptionが発生しているように思えます。