前提・実現したいこと
テキストファイルの行ごとに対応するオブジェクトを生成し、Object型配列に格納、中身を出力したいです。
test.txt
1数学,80,山田太郎 2英語,72,山田太郎 3数学,90,鈴木一郎
Test
1package test; 2import java.io.*; 3public class Test { 4 public static void main ( String[ ] args ) { 5 try { 6 File file = new File( "test.txt" ); 7 dataRoad( file ); 8 9 } catch ( IOException e ) { 10 } 11 } 12 13 public static void dataRoad ( File file ) throws IOException { 14 BufferedReader bufferedReader = new BufferedReader ( new InputStreamReader ( new FileInputStream ( file ), "UTF-8" )); 15 Object[ ] text = new Object[3]; 16 String textfile; 17 String[ ] splitLine = new String[3]; 18 int count = 0; 19 while (( textfile = bufferedReader.readLine() ) != null ) { 20 splitLine = textfile.split( ",", 0 ); 21 22 if ( splitLine[0].equals( "数学" )) { 23 text[count] = new Math( splitLine[1], splitLine[2] ); 24 } 25 else if ( splitLine[0].equals( "英語" )) { 26 text[count] = new English( splitLine[1], splitLine[2] ); 27 } 28 29 count++; 30 } 31 bufferedReader.close(); 32 System.out.println(text[0].toString()); 33 System.out.println(text[1].toString()); 34 System.out.println(text[2].toString()); 35 } 36 37}
Math
1package test; 2public class Math { 3 private static String score; 4 private static String name; 5 6 public Math ( String score, String name ) { 7 this.score = score; 8 this.name = name; 9 } 10 11 public String toString() { 12 return "点数=" + this.score + ", 氏名=" + this.name; 13 } 14 15}
English
1package test; 2public class English { 3 private static String score; 4 private static String name; 5 6 public English ( String score, String name ) { 7 this.score = score; 8 this.name = name; 9 } 10 11 public String toString() { 12 return "点数=" + this.score + ", 氏名=" + this.name; 13 } 14 15} 16
上記のTest.javaを実行すると以下のように出力されて欲しいのですが
点数=80, 氏名=山田太郎
点数=72, 氏名=山田太郎
点数=90, 氏名=鈴木一郎
実際には
点数=90, 氏名=鈴木一郎
点数=72, 氏名=山田太郎
点数=90, 氏名=鈴木一郎
と出力されてしまいます。
while文の中でString配列splitLineの要素を変更していることが原因と考えたのですが、それだと出力結果の2行目も点数=90, 氏名=鈴木一郎と出力されるのではないかと思いました。
なぜ同じclass型のオブジェクトの場合だけ、内容が最後に生成したオブジェクトのものに統一されてしまうのでしょうか。
わかりづらい質問かもしれませんが何卒よろしくおねがいします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/24 07:35