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

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

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

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

Q&A

解決済

2回答

7596閲覧

NullPointerExceptionの原因がわからない

Test1115Test

総合スコア52

Java

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

0グッド

0クリップ

投稿2016/06/22 14:21

filereaderで読んだ文字を二次元配列に格納したいのですがぬるぽが出ます
public String[][] read(String path) {
String[][] s = new String[1000][1000];
File file = new File(path);
String str = "a";

try { BufferedReader br = new BufferedReader(new FileReader(file)); int i = 0, i1 = 0; str = br.readLine(); s[i][i1] = str; while (s[i][i1] != null) { str = br.readLine(); //System.out.println(str); if (str.equals("k") == false) { i1 = i1 + 1; s[i][i1] = str; //System.out.println(s[i][i1]); } else { str = br.readLine(); i = i + 1; i1 = 0; s[i][i1] = str; //System.out.println(s[i][i1]); } } } catch (FileNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } return s; }

kの文字が来るまで配列に格納し、kが来ると変数iに+1をするというものです
if (str.equals("k") == false) { でエラーが出ています
コメントアウトしている所はちゃんと出力しています
解決方法をご教授おねがいします

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

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

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

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

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

Mr_Roboto

2016/06/22 14:46 編集

ちょっと今デバッグしてみてますが、とりあえずコードはそのまま貼ると大変読みにくいので、エディタの上にある</> (コード)というので、囲んでください。バッククオート3つです。
guest

回答2

0

ベストアンサー

BufferedReaderクラスのreadLine()メソッドは、読み込んだ内容がファイルの最後まで達していると、読み込む次の行がないためnullを返します。
そのため、1行読み込んだ後にstrの内容が k であるかを確認されていますが、その前にnullであるかを判定しなければ、読み込んだstrがnullになったときにNullPointerExceptionが発生します。

投稿2016/06/22 15:22

A-pZ

総合スコア12011

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

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

0

やりたいことがよくわからなかったのでとりあえずエラーにならないように簡単に直しました。

br.readLine();は、読む行がなくなるとnullを返すので、そこをチェックする必要があります。
あと、whileの前と直後に呼んでますが、これだと1行めが処理されません。

書き方はいろいろありますが、まずは、ファイルを呼んで普通に出力するところまで書いてから
必要な処理を入れるほうがいいと思いますよ。

public String[][] read(String path) { String[][] s = new String[1000][1000]; File file = new File(path); String str = "a"; try { BufferedReader br = new BufferedReader(new FileReader(file)); int i = 0, i1 = 0; str = br.readLine(); s[i][i1] = str; while (s[i][i1] != null) { // str = br.readLine(); // コメントアウト // System.out.println(str); if (str.equals("k") == false) { i1 = i1 + 1; s[i][i1] = str; // System.out.println(s[i][i1]); } else { // str = br.readLine(); // コメントアウト i = i + 1; i1 = 0; s[i][i1] = str; // System.out.println(s[i][i1]); } // --> 追加 // System.out.println(str); str = br.readLine(); if (str == null) { break; } // <-- 追加 } } catch (FileNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } return s; }

投稿2016/06/22 15:07

Mr_Roboto

総合スコア2208

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問