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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Java

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

3263閲覧

【Java勉強中】For文の多重ループ問題が分かりません。

HIRO46969756

総合スコア9

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Java

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2019/08/12 11:27

編集2019/08/12 13:28

前提・実現したいこと

初めて2週間ほどのプログラミング初心者です。
まだ知識が足らず、質問の仕方がつたないかもしれません。
Javaのfor文の基本を勉強した後に、演習問題に挑戦しています。

問題は以下です。
「00~99までの数値を並べて表示するプログラムを書いてください」
参考図
00 01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18 19
20 21 .....

まず、調べながら自分で書いたのが以下のコードです。

public class Test{ public static void main(String[] args) { String number = ""; for( int i = 0; i < 10; i++){ number = ""; for( int j = 0; j < 10; j++){ number = number + String.valueOf(i) + String.valueOf(j) + " "; System.out.println(number); } } } }

出力したら、画像のようになってしまいました。
イメージ説明

System.out.println(number);の位置を2列目のfor内から出したところ上手く出力されたのですが、なぜうまく出力されたのが分かりません。
自力で書いたコードの間違ってるいる点と、もっとキレイなコードがあればご教示お願い致します。

public class Test{ public static void main(String[] args) { String number = ""; for( int i = 0; i < 10; i++){ number = ""; for( int j = 0; j < 10; j++){ number = number + String.valueOf(i) + String.valueOf(j) + " "; } System.out.println(number); } } }

【追記】
下記コードでも同様に出力できました。
上記コードは、「00 01 02 03 04 05 07 08 09」をnumberに代入しまとめてprintする。
下記コードは、「00」print「01」print....のように単体で順番に出力していく。
という認識で正しいのでしょうか?

public class Test{ public static void main(String[] args) { String number = ""; for( int i = 0; i < 10; i++){ for( int j = 0; j < 10; j++){ number = ""; number = number + String.valueOf(i) + String.valueOf(j) + " "; System.out.print(number); } System.out.println(); } } }

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

Java JDK1.8.0_221
txtエディタ Atom

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

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

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

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

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

guest

回答3

0

ベストアンサー

numberとかって変数は不要だから使わない方がと思います。
変数が増えると考えなくちゃいけない事が増えますから。
変数iが10の位を、変数jが1の位を表しているってのも良くなくて、変数iが表示したい数値をそのまま表しているって表現にした方が良いと思います。
やりたい事を率直に表現している方が分かりやすいと思います。

私だったら以下のようにします。

Java

1public class Test{ 2 public static void main(String[] args) { 3 for( int i = 0; i < 100; i++ ) { 4 System.out.printf( "%02d ", i ); 5 if( i % 10 == 9 ) { 6 System.out.println(); 7 } 8 } 9 } 10} 11

投稿2019/08/12 13:53

mightyMask

総合スコア143

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

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

HIRO46969756

2019/08/13 01:11

回答ありがとうございます。参考にさせていただきます。
guest

0

きちんと字下げする習慣が身についていないから気が付かないのでしょうけど、

for( int j = 0; j < 10; j++){
の中で
System.out.println(number);
しているから、for loop の中で毎回プリントしているだけです。

Java

1public class Test{ 2 public static void main(String[] args) { 3 String number = ""; 4 for( int i = 0; i < 10; i++){ 5 number = ""; 6 for( int j = 0; j < 10; j++){ 7 number = number + String.valueOf(i) + String.valueOf(j) + " "; 8 } 9 System.out.println(number); 10 } 11 } 12}

投稿2019/08/12 11:44

Orlofsky

総合スコア16415

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

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

HIRO46969756

2019/08/12 12:06

早速のご回答ありがとうございます。 このコードの処理の流れは、 ①1段目のforで i に0が代入される。 ②i<10 true、中かっこ内の処理実行。 ③number=""で上書き。 ④2段目のforで、jに0代入される。 ⑤j<10 true、中かっこ内処理実行。 ⑥numberに「00 」代入される。 ここまでは、正しいのでしょうか? 自分としては、System.out.println(number);が1段目のfor内かつ2段目のfor外だと10回しか数字が出力されないように感じてしまうのですが。。
Orlofsky

2019/08/12 12:17

質問の画像に表示されている通りですが、何か?
jimbe

2019/08/12 12:26

変数 number の中が for 文を実行した結果どうなっているか, 想像してください.
Orlofsky

2019/08/12 13:32

インターネットからコピペするだけじゃなくて、きちんとマニュアルを確認するとか、 >Java 入門 でググってしっかり勉強しないと身に付きません。
Orlofsky

2019/08/12 14:50

フローチャートを書いてみては?書き方はググってね。 String なのに number ってセンスがないネーミングだし。
guest

0

100回実行する部分と10回実行する部分がありますが、「改行」は10回実行するべきですね。

投稿2019/08/12 11:37

otn

総合スコア84557

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

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

HIRO46969756

2019/08/12 12:55

ご回答ありがとうございます。 改行というのは、System.out.println()の事であっていますでしょうか?
otn

2019/08/12 13:00

はい。System.out.printでなくSystem.out.printlnを使うと言うことは、改行すると言うことです。
HIRO46969756

2019/08/12 13:10

printとprintlnの違いを知らずに学習を進めていました。 一つ勉強になりました。ありがとうございます。
otn

2019/08/13 02:16

printを使うと、一度変数に入れなくても、つどprintすればいいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問