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

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

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

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

Q&A

解決済

4回答

1461閲覧

JAVAのfor文について

nakano_j

総合スコア2

Java

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

0グッド

0クリップ

投稿2020/05/01 23:37

前提・実現したいこと

JAVAで下記のような数字を並べるプログラムをfor文で作りたい
00 01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

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

以下のソースコードの0文字が入っている変数displayのロジックがよくわかりません

該当のソースコード

JAVA

1class Ex1_10_3 { 2 public static void main (String[] args) { 3 String display=""; 4 5 for(int i=0;i<10;i++){ 6 display=""; 7 for(int j=0;j<10;j++){ 8 display=display+i+j+" "; 9 } 10 11 System.out.println(display); 12 } 13 14 15 } 16 17 18}

試したこと

class Ex1_10_3 {
public static void main (String[] args) {
String display="";

for(int i=0;i<10;i++){ display=""; for(int j=0;j<10;j++){ display=i+j+" "; } System.out.println(display); } }

}
こうした結果、9~18までの数字が縦に並びました
ただこれもよくわかりません
正直わかないことがわからない状態になってしまっています
初心者の質問で申し訳ございませんが、解決のヒントを頂けると嬉しいです

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

maisumakun

2020/05/01 23:39

すみません、どのようなところに納得がいかないのでしょうか。何がわからないのかがわかりません。
dodox86

2020/05/01 23:43

ご自分で書いたプログラムではないのですか? 他人のコードを拝借したので、内容が分からないということでしょうか。
Yasumichi

2020/05/02 00:27 編集

~~~試したところのコードが、元のコードと変わってないような気がします。~~~ 勘違いでした。
nakano_j

2020/05/01 23:46

説明が下手で申し訳ございません。 for(int j=0;j<10;j++){ display=display+i+j+" "; ここの部分で00 01 02 03 04 05 06 07 08 09 こうなってると思うのですが、ここのdisplay+i+j+" "; i+jにdisplayを足す意味がよくわからないです
Zuishin

2020/05/01 23:52 編集

他人のコードを書くときには必ず出典を書いてください。 また、あなたが実行しているのはこのコードではありません。 > こうした結果、9~18までの数字が縦に並びました 明らかに数値として加算されています。
Zuishin

2020/05/02 00:22

他人のコードを書くときには必ず出典を書いてください。
guest

回答4

0

i+jにdisplayを足す意味がよくわからないです

すでにある文字列のあとに足していっています。

なお、文字列連結をループで回して続けると、Javaでは効率が悪いです。StringBuilderを使いましょう。

投稿2020/05/01 23:51

maisumakun

総合スコア145208

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

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

nakano_j

2020/05/02 00:22

ありがとうございました やっと理解ができました
guest

0

こうなってると思うのですが、ここのdisplay+i+j+" ";

i+jにdisplayを足す意味がよくわからないです

displayを足さないと、そのループで次にjが増えた時に前の結果を上書きしちゃうから。

足す場合と足さない場合で、display変数の中身がどう変化するのか確かめてみればわかるはずです。

投稿2020/05/01 23:51

gentaro

総合スコア8949

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

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

nakano_j

2020/05/02 00:22

ありがとうございます 理解できました!
guest

0

ベストアンサー

まず、i が数字の1桁目を、j が数字の2桁目を表しているのは、理解していますか?

同時に i は、1桁目の行を意味します。(伝わりにくいですかね。)

つまり、i は同時に出力行を制御します。

そして、display は出力行の内容になります。なので j のループに入る前に必ず、空の文字列で初期化しています。

そして、j のループで出力行を組み立てています。

その上で一度、トレースをしてみてください。

例えば、i=0、j=0 の時、display + i + j とすることで display の値が、"00 " になります。

次に i=0、j=1 になって、display + i + j とすることで display の値が、"00 01 "になります。(display+ としないと毎回毎回、display の内容が上書きされてしまいます。)

ちょっと飛ばして、i=0、i=9 になったら、"00 01 02 03 04 05 06 07 08 09 " になりますよね?それを System.out.println(display); で出力するわけです。

そしてまた、i が +1 され、i=1 のループに入ったら、display="" で出力行の内容が初期化されます。あとは、同様の流れです。

以上の説明で伝わりますでしょうか?

投稿2020/05/01 23:59

Yasumichi

総合スコア1773

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

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

nakano_j

2020/05/02 00:21

大変わかりやすく 本当にありがとうございました。 助かりました
Zuishin

2020/05/02 02:29

他人のコードを書くときには必ず出典を書いてください。
guest

0

Eclipse等のIDEを使っているなら、デバッガで1行ずつ実行してdisplay・i・jの値を見る。
または、あちこちにSystem.out.println()を仕込んでdisplay・i・jの値を表示して、どのように値が変化しているか見ればロジックが理解しやすくなるのでは。

投稿2020/05/01 23:46

javahack

総合スコア1088

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問