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

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

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

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

Q&A

解決済

2回答

2041閲覧

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

kouaki.kanae

総合スコア7

Java

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

0グッド

0クリップ

投稿2016/06/16 12:13

最近プログラミングの勉強を始めました
言語は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); } }

おねがいします

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

投稿2016/06/16 12:17

yona

総合スコア18155

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

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

kouaki.kanae

2016/06/16 12:29

なるほど Exeptionというのが例外という意味なんですね in thread "main"でメインクラス? スレッド?に問題がおきていて at Main.main(Main.java:16)で16行目に問題があると書かれている という事なんでしょうか とにかく為になりました ありがとうございます
yona

2016/06/16 12:44

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

2016/06/16 12:49

わかりました ちょっとデバックの読み方についても調べてみてまたどうしてもわからない事がでてきたら質問する事にします。 ヒントをくださってありがとうございました。
guest

0

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行目は

java

1f[i] = readLineArray[i];

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

投稿2016/06/16 16:41

swordone

総合スコア20649

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問