###前提・実現したいこと
3行3列のテキストデータを読み込み3行3列の配列に格納
行数は不確定にする予定
お願いいたします。
###発生している問題・エラーメッセージ
1行目しか配列に入らない
###該当のソースコード
is = this.getAssets().open("sample.txt"); br = new BufferedReader(new InputStreamReader(is)); String str; while ((str = br.readLine()) != null) { text.add(str); } nums = new int[text.size()][3]; for (int i = 0; i < text.size(); i++) { String[] s = text.get(i).split(" "); for (int j = 0; j < 3; j++) { nums[i][j] = (int) Integer.parseInt(s[j]); }
###試したこと
行数は不確定になる場合のためArrayListを用意
1行目はすべて配列に入った
textView.setText(String.valueOf(nums[0][2]))は該当数字が表示され、textView.setText(String.valueOf(nums[2][0]))は0が表示されてしまいます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
textの型がArrayList<String>だとすると上のプログラムで動くような気がします。
1行しかできなかったということであればsample.txtが1行しかなかったのだと思います。
java
1String str; 2while ((str = br.readLine()) != null) { 3 text.add(str); 4} 5Log.d("xxx", "line count = " + text.size()); 6...
これでログに"line count = 1"と出るんじゃないんでしょうか。
あるいは他の可能性として「2行目に数字が3要素未満しかなかった」「2行目に空白が2つ連続していた」等々で例外が発生していたとも考えられますが・・・
投稿2017/02/02 08:25
総合スコア18394
0
Java SE 8以降なら????
lang
1 2is = this.getAssets().open("sample.txt"); 3BufferedReader br = new BufferedReader(new InputStreamReader(is)); 4int[][] matrix = br.lines() 5 .map(line -> 6 Stream.of(line.split(" ")) 7 .mapToInt(Integer::parseInt) 8 .toArray()) 9 .toArray(int[][]::new);
投稿2017/02/02 08:21
総合スコア740
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ソースコードが途中で途切れているように見えます。もしかして、この先にbreakが潜んでいたりしませんか?見えているコードは問題なさそうなので、sample.txtが1行しかないか、breakされて1行目しか処理されないか、出力するときに間違えて1行目のデータしか見ていないか、のどれかかと思います。
投稿2017/02/02 08:20
総合スコア9206
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
sample.txt
1 2 3 4 5 6 7 8 9
Main.java
java
1import java.io.BufferedReader; 2import java.io.FileInputStream; 3import java.io.FileNotFoundException; 4import java.io.IOException; 5import java.io.InputStream; 6import java.io.InputStreamReader; 7import java.util.ArrayList; 8import java.util.List; 9 10public class Main { 11 12 public static void main(String[] args) throws IOException { 13 List<String> text = new ArrayList<String>(); 14 int[][] nums; 15 16 InputStream is; 17 BufferedReader br; 18 19 //////////////////////////////////////////////////////// 20 is = new FileInputStream("sample.txt"); 21 br = new BufferedReader(new InputStreamReader(is)); 22 23 String str; 24 while ((str = br.readLine()) != null) { 25 text.add(str); 26 27 } 28 nums = new int[text.size()][3]; 29 for (int i = 0; i < text.size(); i++) { 30 String[] s = text.get(i).split(" "); 31 for (int j = 0; j < 3; j++) { 32 nums[i][j] = (int) Integer.parseInt(s[j]); 33 } 34 } 35 //////////////////////////////////////////////////////// 36 37 for (int[] num : nums) { 38 for (int n : num) { 39 System.out.print(n + ","); 40 } 41 System.out.println(); 42 } 43 } 44 45}
実行結果
1,2,3, 4,5,6, 7,8,9,
おそらく、sample.txt
が意図するフォーマットになっていないと思われます。
以下のようにデバッグコードを追加し、logcat にどのように表示されるか確認してみてください。
Before
java
1while ((str = br.readLine()) != null) { 2 text.add(str); 3 4}
After
java
1while ((str = br.readLine()) != null) { 2 Log.e("My App", str); 3 text.add(str); 4}
追記
sample.txt
1 2 3 4 5 6 0 7 8 9 10 11 12
Main.java
java
1import java.io.BufferedReader; 2import java.io.FileInputStream; 3import java.io.IOException; 4import java.io.InputStream; 5import java.io.InputStreamReader; 6import java.util.ArrayList; 7import java.util.List; 8 9public class Main { 10 11 public static void main(String[] args) throws IOException { 12 int[][] nums; 13 14 InputStream is; 15 BufferedReader br; 16 17 // ////////////////////////////////////////////////////// 18 is = new FileInputStream("sample.txt"); 19 br = new BufferedReader(new InputStreamReader(is)); 20 21 List<int[]> table = new ArrayList<int[]>(); 22 23 String str; 24 while ((str = br.readLine()) != null) { 25 String[] splitted = str.trim().split(" "); 26 if (splitted.length < 3) { 27 throw new IllegalStateException("Too few element."); 28 } 29 30 int[] row = new int[3]; 31 for (int i = 0; i < 3; i++) { 32 row[i] = Integer.parseInt(splitted[i]); 33 } 34 table.add(row); 35 } 36 nums = table.toArray(new int[][] {}); 37 // ////////////////////////////////////////////////////// 38 39 for (int[] num : nums) { 40 for (int n : num) { 41 System.out.print(n + ","); 42 } 43 System.out.println(); 44 } 45 } 46}
実行結果
1,2,3, 4,5,6, 7,8,9, 10,11,12,
投稿2017/02/02 08:15
編集2017/02/02 09:32総合スコア4791
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/02 08:46
2017/02/02 08:48
2017/02/02 08:49
2017/02/02 09:35 編集
2017/02/02 10:41
2017/02/03 06:09
2017/02/03 06:21
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/02 08:37
2017/02/02 08:44
2017/02/02 08:51