• ベストアンサー

ファイルからデータをうまく読み込めません

ファイルからデータを読み込んでクラスに宣言した変数に格納したいのですがうまく出来ません ------------------------------------------ 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 もないため、情報を検出できませんでした と表示されました

  • ilice
  • お礼率27% (13/48)
  • Java
  • 回答数4
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
noname#33813
noname#33813
回答No.3

>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)
回答No.4

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)
回答No.2

オブジェクト配列の初期化ミスです。 国語、算数を0で初期化する直前に dt[i]を初期化する。 ↓ dt[i] = new date(); dt[i].ko = dt[i].su = 0; でOKです。

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.1

配列内の要素が初期化されていないためでは? >date[] dt = new date[2]; ここで、配列dt[]を初期化していますが、 配列内の各要素dt[0]、dt[1]の2つを初期化している所が存在していません。 なので、dt[i]はnullのままであり、 >dt[i].ko = dt[i].su = 0; ここで、NullPointerExceptionが発生しているように思えます。

関連するQ&A

  • クラスのフィールドの比較方法

    2つのクラスのフィールドを比較して、その結果を以下のように表示させたいのですが、どのようにプログラミングをすればいいのでしょうか? 例 class Car { String carname; int height; int width; int length; } class Garage { String garagename; int height; int width; int depth; } public class example { public static void main (String[] args) throws IOException { Car car[]; car = new Car[5]; System.out.println("車の情報を入力してください。"); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in); for(int i=0; i<5; i++){ car[i] = new Car(); System.out.println(i+1 + "台目の車の名前を入力してください。"); String str1 = br1.readLine(); System.out.println("車の高さを入力してください。"); String str2 = br1.readLine(); System.out.println("車の幅を入力してください。"); String str3 = br1.readLine(); System.out.println("車の長さを入力してください。"); String str4 = br1.readLine(); int h1 = Integer.parseInt(str2); int w1 = Integer.parseInt(str3); int l1 = Integer.parseInt(str4); car[i].carname = str1; car[i].height = h1; car[i].weith =w1; car[i].length =l1; } for(int i=0; i<5; i++){ garage[i] = new Garage(); System.out.println(i+1 + "つ目の車庫の名前を入力してください。"); String str5 = br2.readLine(); System.out.println("車庫の高さを入力してください。"); String str6 = br2.readLine(); System.out.println("車庫の幅を入力してください。"); String str7 = br2.readLine(); System.out.println("車庫の長さを入力してください。"); String str8 = br2.readLine(); int h2 = Integer.parseInt(str6); int w2 = Integer.parseInt(str7); int d2 = Integer.parseInt(str8); garage[i].garagename = str2; garage[i].height = h2; garage[i].weith =w2; garage[i].depth =d2; } } 出力例 garage1 car3 garage2 car5 garage3 car4 garage4 car2 garage5 car1 よろしくお願いします。

    • ベストアンサー
    • Java
  • ArrayListを使ったクラスの作成の仕方

    次のプログラム、どこが間違っているのでしょうか? コンパイルは通るのですが、実行しようとすると ずら~っとエラーが出てしまいます。 (例)at java.lang.ClassLoader.defineClass1(Native Method) at java.security.SecureClassLader.defineClass..... at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) ********************************************************** package siryou; import java.util.ArrayList; import java.io.*; class Info { private String name; private String age; private String nationality; public void setName(String nm) { name = nm; } public void setAge(String a) { age = a; } public void setNationality(String nt) { nationality = nt; } public void show(String j) { System.out.println("「名前=" + name + "」"); System.out.println("「年齢=" + age + "」"); System.out.println("「国籍=" + nationality + "」"); } } class Kojinjyoho02 { public static void main(String args[])throws IOException { System.out.println("何回入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); Info in = new Info(); ArrayList list = new ArrayList(); for(int i =0; i < res; i++){ System.out.println("名前は?"); str = br.readLine(); in.setName(str); System.out.println("年齢は?"); str = br.readLine(); in.setAge(str); System.out.println("国籍は?"); str = br.readLine(); in.setNationality(str); list.add(in); } for(int j=0; j < list.size(); j++){ String jyoho = (String)list.get(j); in.show(jyoho); } } }

    • ベストアンサー
    • Java
  • JAVAの初心者です.

    import java.io.*; class Sample3 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int meny; int max = 0; int kingaku[]; kingaku = new int[5]; char ss[][]; ss = new char[5][80]; do{ String hako = br.readLine(); meny = Integer.parseInt(hako); System.out.println("1:入力とその長さ"); System.out.println("2:データ入力"); System.out.println("3:データ表示"); System.out.println("4:おしまい"); switch(meny){ case 1: System.out.println("文字を入力してください。"); String input = br.readLine(); System.out.println(input + "は" + input.length + "文字です。"); break; case 2: if (max == 0){ System.out.printin("登録をしてからお選びください。"); }else{ System.out.println("名前を入力してください。"); String ss[max] = br.readLine(); System.out.println("金額を入力してください。"); String kingaku[max] = br.readLine(); System.out.println(ss[max] + "さんで" + kingaku[max] + "を登録します。"); max++; } break; case 3: System.out.println("現在登録人数は" + max + "人です。"); for(int aa = 0;aa<max;aa++){ System.out.println(name[max] + kingaku[max]); } break; } }while(meny != 4); } } 上記のソースなのですが、コンパイルで今のところ2つエラーが出てしまうのです。 String ss[max] = br.readLine(); String kingaku[max] = br.readLine(); の所がエラーと表示されます。 javaは入力した文字を表示するだけでしたら    = Integer.paruseint()する必要ないですよね?? 初心者ならではの質問でごめんなさい。 ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • ファイルの読み取り

    xmlファイルの内容を読み取り、その内容をString文字列として変数に格納したいと考えて以下のようなクラスを作成しましたが、出力してみると、最初にnullが入ってしまい、さらに改行位置でスペースが入ってしまいます。nullも入らず、改行位置に\nを追加した形で、変数に入れたいと考えております。 どのようにすればよろしいのでしょうか。 [読み込みxml] <?xml version="1.0" encoding="UTF-8"?> <exp:References> <IDProviderReference RefType="IdProviderReference"> <OID>-2</OID> <Name>Internal Identity Provider</Name> <Props/> <TypeVal>1</TypeVal> </IDProviderReference> </exp:References> [読み取りクラス] public XMLRead{ public static void main(String args[])throws Exception{ try{ String POLICY; BufferedReader br = new BufferedReader(new FileReader("読み取りxml")); String line; while ((line = br.readLine()) != null) { POLICY =POLICY+line; } br.close(); }catch(Exception e){ System.out.println(e); }   System.out.println("policy: " + POLICY); } }

    • ベストアンサー
    • Java
  • BufferedReaderで配列のデータを取り出したい

    PrintWriterで配列のデータを書き込み、 BufferedReaderで書き込んだデータを呼び出したい のですが、下記のソースで書き込むと [Ljava.lang.String;@1add2dd のように表示されてしまいます。 テキストファイルに 1,Server1 のような感じで 書き込んで読み込むにはどのようにしたら いいでしょうか? すみません、ご教授下さい。 よろしくお願いします。 import java.io.*; public class IOTest { public static void main(String[] args) { try{ PrintWriter pr = new PrintWriter( new BufferedWriter(new FileWriter("test.txt")),true); String index = "1"; String serverName = "Server1"; String Server [] = {index, serverName}; pr.println(Server); System.out.println("登録したデータは:" + Server + "です。\n"); BufferedReader br = new BufferedReader( new FileReader("test.txt")); String line; while((line = br.readLine()) != null){ System.out.println("取り出したデータは:" + line + "です。"); } }catch(Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • 実行時のとエラーについて質問します

    SQL文を使ったプログラムを実行しようとするとエラーが 出てしまうのですが、解決方法を教えて下さい。 **** プログラム **************************************** (前略) public class DBAccessMainNaka{ public static void main(String args[])throws Exception{ DBAccessNaka naka = new DBAccessNaka(); System.out.println("操作を選択して下さい"); System.out.println("1.Insert Account 2.Select Account 3.Insert Trainee 4.Select Trainee"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); (中略) }else if(res == 2){ System.out.println("名前を入力して下さい"); String name2 = br.readLine(); Account account = nakajima.selectAccount(name2); System.out.println("「検索結果」"); System.out.println("id [" + account.getId() + "]"); System.out.println("name [" + account.getName() + "]"); System.out.println("money[" + account.getMoney() + "]"); (中略) } else if(res == 4){ System.out.println("名前(名)を入力して下さい"); String firstName = br.readLine(); List<Trainee> traineeList = new ArrayList<Trainee>(); traineeList.add((Trainee) nakajima.selectTrainee(firstName)); for(int i=0; i<traineeList.size(); i++){ Trainee trainee =(Trainee)traineeList.get(i); System.out.println("[検索結果]"); System.out.println("id [" + trainee.getId() + "]"); System.out.println("id [" + trainee.getlast_Name() + "]"); System.out.println("id [" + trainee.getfirst_Name() + "]"); System.out.println("id [" + trainee.getbirth_Day() + "]"); } } ************************************************************* res == 1と3のときは上手く実行出来るのですが、 res == 2を選択すると、java.sql.SQLException: ORA-00936: 式がありません。というエラーが出て、 res == 4を選択すると、java.lang.ClassCastExceptionが出てしまいます。 エラーの意味など色々調べたのですが解決出来なかったので、 間違っている記述があれば教えてください。 ただ、他のクラスも利用しているので分かりにくいかもしれないので その際は聞いていただければその部分についても書きます。 変な質問ですみませんが、よろしくお願いします。

    • ベストアンサー
    • Java
  • 多次元配列について

    このような課題が出ました。  複数人の名前を入力してから  3教科の点数を全員分入力し、  各教科の平均点と、最高点と取った人の名前を表示せよ。 頑張って途中までやったんですが、ここから先に進めません。 どういうふうにやればいいんでしょうか? import java.io.*; class K203 {  public static void main(String args[]) throws IOException{   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   System.out.print("人数を入力して下さい:");   String str = br.readLine();   int ninzuu = Integer.parseInt(str);   String name[] = new String[ninzuu];   for(int i=0; i<ninzuu; i++){    System.out.print(i+1+"人目の名前を入力してください:");    name[i] = br.readLine();   }   String subject[] = {"国語","数学","英語"};   String tensuu[][] = new String[subject.length][ninzuu];   System.out.println("点数を入力してください");   for(int i=0; i<subject.length; i++){    for(int s=0; s<ninzuu; s++){     System.out.print(name[i]+subject[]);     tensuu[i][s] = br.readLine();    }   }  } }

  • クラスのフィールドの値を配列に代入する方法

    フィールドの値を代入したいのですが、 java.lang.ArrayIndexOutOfBoundsException というエラーが出てしまい、どうすればいいのかわかりません。 どのように対処すればいいのでしょうか? class Car { String carname; int height; int width; int length; } class public static void main(String[] args) throw IOException { Car car[]; car = new Car[5]; System.out.println("車の情報を入力してください。"); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in); for(int i=0; i<5; i++){ car[i] = new Car(); System.out.println(i+1 + "台目の車の名前を入力してください。"); String str1 = br1.readLine(); System.out.println("車の高さを入力してください。"); String str2 = br1.readLine(); System.out.println("車の幅を入力してください。"); String str3 = br1.readLine(); System.out.println("車の長さを入力してください。"); String str4 = br1.readLine(); int h1 = Integer.parseInt(str2); int w1 = Integer.parseInt(str3); int l1 = Integer.parseInt(str4); car[i].carname = str1; car[i].height = h1; car[i].weith =w1; car[i].length =l1; } for(int i=0; i<5; i++){ int c_h[] = new int[5]; c_h[i] = car[i].height; } } よろしくお願いします。

    • ベストアンサー
    • Java
  • Java言語のプログラムをC言語にする場合

    次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか? import java.io.*; public class Sort { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("整数値を入力してください"); String line = reader.readLine(); int a = Integer.parseInt(line); String line2 = reader.readLine(); int b = Integer.parseInt(line2); String line3 = reader.readLine(); int c = Integer.parseInt(line3); String line4 = reader.readLine(); int d = Integer.parseInt(line4); int[] data = {a, b, c, d}; for (int i = 0; i< data.length - 1 ; i++) { for (int j = i + 1; j< data.length; j++) { if(data[i] > data[j]) { int e = data[i]; data[i] = data[j]; data[j] = e; } } } System.out.println("昇順に並べ替えると、"); for (int i = 0; i< data.length; i++) { System.out.print(data[i] + " "); } System.out.println("です。"); } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } } import java.io.*; public class Yakusu { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("2つの整数値を入力してください"); System.out.print("整数A : "); String line = reader.readLine(); int a = Integer.parseInt(line); System.out.print("整数B : "); String line2 = reader.readLine(); int b = Integer.parseInt(line2); if(a%b == 0){ System.out.println("BはAの約数です"); } else { System.out.println("BはAの約数ではありません"); } } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } }

  • エラーの訂正でアドバイスください。

    javaプログラミング超初心者です import java.io.*; public class ex22b { public static void main(String[] arg) { System.out.print("x: "); int x = (new Integer (in.readLine())). intValue(); System.out.print("y: "); int y = (new Integer (in.readLine())). intValue(); int a; while (y > 0) { a = a + x; System.out.println("kekka = " + a); System.out.println("y = " + y); y = y - 1; } System.out.println("乗算結果は " + a); } } というソースを書いたら、コンパイルの際に シンボルを見つけられません シンボル:変数 in 場所  :ex22bのクラス int x = (new Integer (in.readLine())). intValue();            ^ int y = (new Integer (in.readLine())). intValue();            ^ というエラーが出ました。 どこをどう直したらいいのでしょうか。

    • ベストアンサー
    • Java