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

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

ただいまの
回答率

89.54%

自分のコードの何が悪いかわからない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 889

kouaki.kanae

score 5

最近プログラミングの勉強を始めました
言語はjavaです。

ちなみに下のコードの一部はパイザのサイトにあった一般入出力の方法みたいなページにあった
この

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[] ) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
int N = Integer.parseInt(line);
for (int i = 0; i < N; i++) {
String readLine = br.readLine();
readLine = readLine.trim();
String[] readLineArray = readLine.split(",");
System.out.println("hello = " + readLineArray[0] + " , world = " + readLineArray[1]);
}
}
}

コードの一部を自分なりに検証してコピペしたものです。

前提・実現したいこと

ここに質問したいことを詳細に書いてください
パイザの問題集を解いているのですが今起きているエラーがなぜ起きているのかわかりません。
いろいろ試してみてソースコードの横(数字が書いてあるとこにある)バッテンを全部消す事に成功したのですがそれでもエラーがでてしまいます。
どういうエラーが出ているのかヒントをくれるとうれしいです。

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

エラーメッセージ
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at Main.main(Main.java:16)

該当のソースコード

ここにご自身が実行したソースコードを書いてください
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        // 自分の得意な言語で
        // Let's チャレンジ!!
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        int N = Integer.parseInt(line);
        String f[] = new String[3];
        for (int i = 0; i < N; i++) {
            String readLine = br.readLine();
            readLine = readLine.trim();
            String[] readLineArray = readLine.split(",");
            f[i] = readLineArray[i];
        }
        String a = f[0];
        String b = f[1];
        String c = f[2];
        System.out.println(a+"\n"+b+"\n"+c);
    }
}

おねがいします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

コードを見るよりも先に例外の意味を理解しましょう。
どこでエラーが起きているかもメッセージに書いてあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/16 21:29

    なるほど
    Exeptionというのが例外という意味なんですね

    in thread "main"でメインクラス? スレッド?に問題がおきていて
    at Main.main(Main.java:16)で16行目に問題があると書かれている

    という事なんでしょうか

    とにかく為になりました
    ありがとうございます

    キャンセル

  • 2016/06/16 21:44

    例外の内容、クラス名、クラス内の行数が明記されます。
    プログラムを書くことも重要ですが、コードの誤りを見つけるデバッグの技術も身につけた方が良いです。
    当面はこのメッセージをヒントにコードの誤りを見つけることになります。

    キャンセル

  • 2016/06/16 21:49

    わかりました
    ちょっとデバックの読み方についても調べてみてまたどうしてもわからない事がでてきたら質問する事にします。

    ヒントをくださってありがとうございました。

    キャンセル

+1

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
   at Main.main(Main.java:16)

このメッセージが意味するところは、
java.lang.ArrayIndexOutOfBoundsException:配列の範囲外を参照しようとしたための例外です。その後の数値は参照しようとした配列のインデックスです。「1」ということは、長さ1以下(長さ1の場合、存在するインデックスは0のみ)の配列に対してインデックス1を参照しようとしたということになります。
この例外が、Mainクラスの16行目で発生したと言っています。16行目は

f[i] = readLineArray[i];


ここですね。この辺りの流れを考えると、for文の中でreadLineしたのが原因ではないでしょうか?本来1行しかない入力(最初の数値の変換を含めて2行)に対して2回目読み込もうとして、空の文字列を受け取り、splitしますが長さ0の配列が出来上がり、その1番を参照しようとした、という流れかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.54%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る