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

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

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

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

Q&A

解決済

3回答

4287閲覧

ファイルから読み込んだ一行のデータを二次元配列に格納する方法

shuupy

総合スコア1

Java

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

0グッド

0クリップ

投稿2021/11/06 06:04

前提・実現したいこと

out.txtに書かれた九九の表を読み取り、読み込んだ1行のデータをスペースで分割し、文字列から数字に変換して二次元配列に格納したいです。
前提として、スペース分割にはStringクラスのsplitメソッドを使用します。
また、String型の二次元配列sqqとint型の二次元配列qqを使用します。

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

なし

該当のソースコード

java

1import java.io.*; 2 3public class P07 { 4 public static void main(String[] args) { 5 int[][] qq = new int [9][9]; 6 String[][] sqq = new String[9][9]; 7 8 try { 9 File file = new File("out.txt"); 10 BufferedReader br = new BufferedReader(new FileReader(file)); 11 String s; 12 while((s = br.readLine()) != null) { 13 この中での処理が分からないです。 14 } 15 16 br.close(); 17 18 }catch(IOException e) { 19 System.out.println(e); 20 } 21 } 22} 23
out.txt 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

どうしても一行のデータを二次元配列に格納するやり方が分かりませんでした。
もしよろしければ、ヒント等を頂けると幸いです。

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

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

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

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

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

shuupy

2021/11/06 07:17

同類のものです。
jimbe

2021/11/06 07:24 編集

367636 の方は勘違いされていましたが、 367636 の「該当のソースコード」は読み込みのコードです。( "," 区切りで1行だけですけど。)
guest

回答3

0

区切りのスペースが 1個の場合と 2個の場合がありますから、
split の引数は、正規表現の " +" にすればよいでしょう。
行の先頭のスペースは区切りにしたくないので、trim で除去すればよいでしょう。
次のコードを参考にしてください。

java

1class Main { 2 public static void main(String[] args) { 3 String s = " 1 2 72 81"; 4 String[] ss = s.trim().split(" +"); 5 for (String t : ss) System.out.println(t); 6 } 7}

split を使わなくてよいのなら、
Scannerクラスの nextIntメソッドで数値を読むのが簡単でしょう。

Java

1import java.util.Scanner; 2import java.io.File; 3 4class Main { 5 public static void main(String[] args) throws Exception { 6 Scanner sc = new Scanner(new File("out.txt")); 7 int[][] qq = new int[9][9]; 8 for (int i = 0; i < 9; i++) 9 for (int j = 0; j < 9; j++) 10 qq[i][j] = sc.nextInt(); 11 System.out.println("2 x 3 = " + qq[1][2]); 12 System.out.println("9 x 9 = " + qq[8][8]); 13 } 14}

投稿2021/11/06 10:22

編集2021/11/06 22:31
kazuma-s

総合スコア8224

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

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

0

ベストアンサー

まず、プログラミングというのは『こう書けばいい』というものではありません。
ロジック(論理)を書くのです。簡単に言えば、『現実世界のシミュレーション』です。

質問者さんは、ノートに

text

11 2 3 4 5 6 7 8 9 22 4 6 8 10 12 14 16 18 33 6 9 12 15 18 21 24 27 44 8 12 16 20 24 28 32 36 55 10 15 20 25 30 35 40 45 66 12 18 24 30 36 42 48 54 77 14 21 28 35 42 49 56 63 88 16 24 32 40 48 56 64 72 99 18 27 36 45 54 63 72 81

のように書かれていたらどう読みますか?
これをExcelのシートとかに書き写すとしたらどうしますか?

私なら『規則性』を見付けます。

まず、一行目。
1 2 3 4 5 6 7 8 9 ですが、
<数字><半角スペース><半角スペース><数字><半角スペース><半角スペース><数字>...のような繰り返しになっています。

共通部分だけくくりだすと、<数字><半角スペース><半角スペース>となっています。(最後の9以外)
最後だけは半角スペース無しですね。

二行目も同様にやると、28は<数字><半角スペース><半角スペース>、1018は<数字><半角スペース>となっています。(最後の18以外)

三行目も同様に。

そうすると、二桁の数字が来るときは半角スペース一個、一桁の数字が来るときは(二桁に合わせるためだろうか)半角スペースが二個になっています。

もしこれが常に最後の数字以外は半角スペース一個とかであれば、半角スペースを区切り文字にして文字列分割すればいいだけです。

でも今回は <半角スペース><半角スペース> のように複数ある場合もあります。
なのでちょっと工夫が必要ですね。

普通に半角スペースで分解すると、{ 1, 空, 2, 空, 3, 空, 4, 空, ... } のような感じになってしまいます。
よってちょっと工夫が必要。

でも、よーく見てください。分解後のやつを見ると、数字系か「空」であることがわかります。
つまり、『空かどうか』を判断して、空でないなら数字と見なして整数に変換すればいいですね。

後はこれらを実装するだけです。

文字列分割や整数に変換するやつはご自分で調べてください。

投稿2021/11/06 06:30

BeatStar

総合スコア4962

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

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

shuupy

2021/11/06 07:00

とても丁寧なアドバイスをありがとうございます。 僕はロジックをよく考えず、「こう書けばいい」という風に思いながら、いつもプログラミングをしていました。今後はロジックを意識しながらプログラミングするよう気をつけます。 回答ありがとうございました。
kazuma-s

2021/11/06 10:24

解決したのなら、「この中での処理が分からないです。」の部分をどう書いたのかを教えてください。
guest

0

1行読んでそれをsplitで配列ができるので、そいつを配列に入れていけばいいというはなしですね

投稿2021/11/06 06:14

y_waiwai

総合スコア88042

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

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

shuupy

2021/11/06 07:02

回答ありがとうございます。 参考にしようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問