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

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

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

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

545閲覧

ファイルを読み込んで、4行で表されている選手成績を1行でコンソールに表示したい

hedgehogs

総合スコア15

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2022/09/14 13:36

編集2022/09/18 16:37

前提

Javaの勉強をしています。
ファイルを取り込んで、1選手の成績を一行でコンソールで表示する際にエラーメッセージが発生しました。

実現したいこと

  • 日本語変数モデル
  • リスト1選手の成績が4行で表されているファイルを読み込んでモデルに格納後、さらにListに格納。
  • リスト1選手の成績を1行でコンソールに出力。

発生している問題・エラーメッセージ

java

1java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 2 at Challenge.Pro.<init>(Pro.java:11) 3 at Challenge.Challenge5.main(Challenge5.java:29)

該当のソースコード

メインクラス

java

1package Challenge; 2 3import java.io.BufferedReader; 4import java.io.File; 5import java.io.FileInputStream; 6import java.io.InputStreamReader; 7import java.util.ArrayList; 8import java.util.List; 9 10public class Challenge5 { 11 private static final String FILE_PATH = "C:\\Users\\user name \\Documents\\workspace-spring-tool-suite-4-4.15.3.RELEASE\\test 1st\\dat\\pro.csv"; 12 13 public static void main(String[] args) { 14 File file = new File(FILE_PATH); 15 16 try (FileInputStream fis = new FileInputStream(file); 17 InputStreamReader isr = new InputStreamReader(fis); 18 BufferedReader br = new BufferedReader(isr);) { 19 20 21 List<Pro> pros = new ArrayList<>(); 22 String line; 23 24 25 while ((line = br.readLine()) != null) { 26 String[] strs = line.split("\n"); 27 28 // コンストラクタをオーバロードして呼び出し 29 Pro pro = new Pro(strs); //29行目 30 pros.add(pro); 31 32 } 33 34 for (Pro pro1 : pros) { 35 System.out.println(pro1); 36 37 } 38 39 } catch (Exception e) { 40 e.printStackTrace(); 41 42 } finally { 43 44 } 45 } 46}

pro class

java

1package Challenge; 2 3public class Pro { 4 private String 順位; 5 private String 選手名; 6 private String 球団; 7 private String 打率; 8 9 public Pro(String[] pros) { 10 this.set順位(pros[0]); 11 this.set選手名(pros[1]);//11行目 12 this.set球団(pros[2]); 13 this.set打率(pros[3]); 14 } 15 16 public String get順位() { 17 return 順位; 18 } 19 20 public void set順位(String 順位) { 21 this.順位 = 順位; 22 } 23 24 public String get選手名() { 25 return 選手名; 26 } 27 28 public void set選手名(String 選手名) { 29 this.選手名 = 選手名; 30 } 31 32 public String get球団() { 33 return 球団; 34 } 35 36 public void set球団(String 球団) { 37 this.球団 = 球団; 38 } 39 40 public String get打率() { 41 return 打率; 42 } 43 44 public void set打率(String 打率) { 45 this.打率 = 打率; 46 } 47 48 public String toString() { 49 return "順位=" + this.get順位() + ", 選手名" + this.get選手名() + ", 球団" + this.get球団() + ", 打率" + this.get打率(); 50 } 51}

呼び出したいファイル

1 村上 (ヤ) .340 115 496 394 134 17 0 49 298 120 95 97 97 5 0 0 12 6 5 .476 .756 1.232 .376 12 2 大島 (中) .323 82 367 337 109 11 1 1 125 15 35 42 21 7 2 0 7 3 1 .375 .371 .746 .246 0 3 佐野 (デ) .320 101 438 406 130 26 1 17 209 57 48 44 28 3 0 1 0 1 10 .368 .515 .882 .289 4 4 宮﨑 (デ) .308 93 373 334 103 22 0 9 152 34 39 25 35 2 0 2 0 0 11 .375 .455 .830 .254 5 5 近本 (神) .293 110 485 441 129 14 1 1 148 25 58 50 35 6 3 0 23 5 7 .353 .336 .688 .314 2 6 坂倉 (広) .289 121 505 456 132 17 3 12 191 56 64 72 37 8 0 4 1 1 13 .350 .419 .769 .295 13 7 牧 (デ) .288 103 437 389 112 28 1 22 208 70 55 65 34 8 0

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

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

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

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

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

dodox86

2022/09/14 14:56 編集

> csvを取り込んで、 ... > 呼び出したいCSV ... > 1 > 村上 > (ヤ) > .340 115 496 394 134 17 0 49 298 120 95 97 97 5 0 0 12 6 5 .476 .756 1.232 .376 12 > 2 ... これはCSVファイルの内容ではありません。CSVとは各項目がカンマ(,)で区切られたものを言います。「Comma Separated Values」の略です。
guest

回答1

0

ベストアンサー

while ((line = br.readLine()) != null) {
これで読み込むのは 1行だけです。しかも末尾の "\n" は含まれません。
したがって、String[] strs = line.split("\n"); で分割しても
strs は要素数 1 の配列になります。

Pro pro = new Pro(strs); では、
コンストラクタ Pro(String[] pros) の中で pros[0] しか参照できません。
pros[1] を参照して、ArrayIndexOutOfBoundsException になります。

次のようにしてみてはどうでしょうか?

Java

1 while ((line = br.readLine()) != null) {` 2 String[] strs = { line, br.readLine(), br.readLine(), br.readLine() };

投稿2022/09/14 15:03

kazuma-s

総合スコア8224

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

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

hedgehogs

2022/09/14 15:17

考え方が根本から違っていました。。 おかげで解決いたしました、ありがとうございます!
hedgehogs

2022/09/17 23:35

すみません。。 こちら、4行目のデータの23項目を更に分割して、それぞれインスタンスフィールドにいれて、1行から4行目を1つ配列に入れるにはどのようにしたらよいのでしょうか? 分割することで、4行目に23項目のデータが一つでもなければエラーを表示するようにして精度を高めたいのと、内側の処理では1つ1つの項目として処理し、1~4行目の各項目をすべて分割した状態で配列に格納したいためです。
kazuma-s

2022/09/18 07:37

4行読み込みの問題は解決しているので、新たな質問にしてください。 4行目には 24項目あるのではないのですか? 最初の質問のコードで使っていた split で分割して配列にできませんか? 1行目から4行目を1つの配列に入れるとは、要素数 27の配列にするということですか? 順位、選手名、球団のフィールドは要らないということですか? どのようなインスタンスフィールドにしたいのかが分かるようにコードをつけて質問してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問