質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1762閲覧

javaでcsvファイルを読み込み、他クラスのフィールドに代入したい。

K.M.PEANUTS

総合スコア40

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/07/15 05:47

編集2021/07/16 02:14

java

1import java.io.*; 2import java.util.*; 3import java.nio.file.*; 4import readData.*; 5 6public class readAndWrite { 7 public void read(readData rd, readDataBook rdbook) { 8 try(FileReader fr = new FileReader("data.csv")) { 9 BufferedReader reader = new BufferedReader(fr); 10 String line; 11 line = reader.readLine(); 12 while (line != null) { 13 System.out.println(line); 14 rd.setReadData(line); 15 rdbook.addReadDataBook(rd); 16 line = reader.readLine(); 17 } 18 }catch(FileNotFoundException e) { 19 System.out.println("File not found"); 20 }catch(IOException e) { 21 System.out.println(e); 22 } 23 } 24 25 public void write(int num, readDataBook book) { 26 try (PrintWriter w = new PrintWriter( 27 new BufferedWriter( 28 new FileWriter("out.txt")))) { 29 //各教科の平均点を書き出す 30 w.println(book.japaneseAverage()); 31 w.println(book.mathAverage()); 32 w.println(book.englishAverage()); 33 w.println(book.scienceAverage()); 34 w.println(book.socialAverage()); 35 36 //5教科平均点を書き出す 37 w.println(book.fiveAverage()); 38 39 //5教科合計の1位を書き出す 40 w.println("1位 " + book.fiveWinPerson() + " " + book.fiveWinScore()); 41 42 43 } catch(IOException e) { 44 System.out.println(e); 45 } 46 } 47 48} 49

java

1package readData; 2 3public class readData { 4 5 public String name; 6 public int japanese; 7 public int math; 8 public int english; 9 public int science; 10 public int social; 11 12 public void setReadData(String n, int j, int m, int e, int sc, int so) { 13 this.name = n; 14 this.japanese = j; 15 this.math = m; 16 this.english = e; 17 this.science = sc; 18 this.social = so; 19 } 20 21 public String getName() { 22 return this.name; 23 } 24 25 public int getJapanese() { 26 return this.japanese; 27 } 28 29 public int getMath() { 30 return this.math; 31 } 32 33 public int getEnglish() { 34 return this.english; 35 } 36 37 public int getScience() { 38 return this.science; 39 } 40 41 public int getSocial() { 42 return this.social; 43 } 44 45 public int getSum() { 46 int sum; 47 sum = this.japanese + this.math + this.english + this.science + this.social; 48 return sum; 49 } 50 51 public double getAverage() { 52 int sum; 53 double ave; 54 sum = this.getSum(); 55 ave = (double)sum / 5; 56 return ave; 57 } 58} 59

java

1package readData; 2 3public class readDataBook { 4 readData[] list = new readData[10]; 5 int num = 0; 6 7 //読み込んだデータを配列に格納する 8 public void addReadDataBook(readData r) { 9 list[num] = r; 10 num++; 11 } 12 //何人分のデータが格納されているかを返す 13 public int getNum() { 14 return this.num; 15 } 16 17 //各教科の平均点を返す 18 public double japaneseAverage() { 19 int sum = 0; 20 double ave; 21 for(int i=0; i<num; i++) { 22 sum += list[i].getJapanese(); 23 } 24 return ave = sum / num; 25 } 26 27 public double mathAverage() { 28 int sum = 0; 29 double ave; 30 for(int i=0; i<num; i++) { 31 sum += list[i].getMath(); 32 } 33 return ave = sum / num; 34 } 35 36 public double englishAverage() { 37 int sum = 0; 38 double ave; 39 for(int i=0; i<num; i++) { 40 sum += list[i].getEnglish(); 41 } 42 return ave = sum / num; 43 } 44 45 public double scienceAverage() { 46 int sum = 0; 47 double ave; 48 for(int i=0; i<num; i++) { 49 sum += list[i].getScience(); 50 } 51 return ave = sum / num; 52 } 53 54 public double socialAverage() { 55 int sum = 0; 56 double ave; 57 for(int i=0; i<num; i++) { 58 sum += list[i].getSocial(); 59 } 60 return ave = sum / num; 61 } 62 63 //5教科の平均点を返す 64 public double fiveAverage() { 65 int sum = 0; 66 double fiveave; 67 for(int i=0; i<num; i++) { 68 sum += list[i].getSum(); 69 } 70 fiveave = (double)sum / num; 71 return fiveave; 72 } 73 74 //5教科の1位の人を返す 75 public String fiveWinPerson() { 76 int winner = 0, rt = 0; 77 for(int i=0; i<num; i++) { 78 if(winner < list[i].getSum()) { 79 winner = list[i].getSum(); 80 rt = i; 81 } 82 } 83 return list[rt].name; 84 } 85 86 //5教科の1位の得点を返す 87 public int fiveWinScore() { 88 int winner = 0, rt = 0; 89 for(int i=0; i<num; i++) { 90 if(winner < list[i].getSum()) { 91 winner = list[i].getSum(); 92 rt = i; 93 } 94 } 95 return list[rt].getSum(); 96 } 97 98}

csv

1masaki,86,75,94,73,83 2nobuyuki,91,89,96,88,94 3hironobu,60,54,36,59,43 4syuji,71,68,69,71,71 5masayasu,42,31,56,42,38 6toshiaki,66,57,63,59,68

やりたいこと

readAndWriteクラスでdata.csvを1行ずつ読み込み、readDataクラスのインスタンスのフィールドに代入してから、readDataBookクラスの配列に代入したいです。

発生しているエラー

./readAndWrite.java:14: エラー: クラス readDataのメソッド setReadDataは指定された型に適用できません。
rd.setReadData(line);
^
期待値: String,int,int,int,int,int
検出値: String
理由: 実引数リストと仮引数リストの長さが異なります

エラー解釈
変数lineをString型で定義しているため、引数がint型であるsetReadDataを正しく使用できていない。

ネットで調べたのですが、どのようにStringをintに変換してうまく読み込ませればよいのかわからなかったので教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Java

1// 現在の実装 2rd.setReadData("masaki,86,75,94,73,83"); 3 4// 本来設定すべき値 5rd.setReadData("masaki", 86, 75, 94, 73, 83); 6

文字列を切り裂いて要素毎に取り出す処理や、文字列を数値に変換する処理は
世に溢れているので見つからない事は無いと思います。


以下は忘れて下さい。(履歴として残しておきます)
これは何をするつもりで書いたのですか?

Java

1 public addReadDataBook(readData r) { 2 list[num] = r; 3 num++; 4 }

投稿2021/07/15 05:57

編集2021/07/16 05:17
Luice

総合スコア771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K.M.PEANUTS

2021/07/15 06:00

readDataクラスでは一人の値しか入れられないと考えたため、readDataインスタンスの配列を作ってまとめようとして書きました。
Luice

2021/07/15 06:08

何を問いたいのかいまいち理解出来ないです。 やりたい事ベースで仕分けると… 1. readAndWriteクラスでdata.csvを1行ずつ読み込み 既にある 2. readDataクラスのインスタンスのフィールドに代入してから 既にある 3. readDataBookクラスの配列に代入したいです。 既にある 無いのは1と2の中間処理くらい?ですか。
K.M.PEANUTS

2021/07/15 06:45

data.csvを1行ずつ読み込むことはできましたが、その値をreadDataクラスのインスタンスのフィールドに代入する処理ができません。 教えてほしいのは2の処理です。 それができないため3の処理もできていません。。
Luice

2021/07/15 06:55

上記の通り2の処理はあなたが提示したソースに既にあります。 どこからかコピペで持ってきたのか知りませんが それ故に、気づいていない/理解していないという事です。
K.M.PEANUTS

2021/07/15 07:18

もしかして、 rd = line = reader.readLine(); の部分ですか? 記載しているコードは全て自分で書いたものですが、rd = の後の処理がわからず空白にしていたつもりです。
Luice

2021/07/15 07:31

rdの部分が書きかけである事は理解していますし、 rd = ... を書く位置が根本的に間違っている事も理解しています。 またreadData rdを宣言している位置から、 仮に回答に辿り着いたとしても、今後想定されるバグも予見しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問