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

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

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

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

Q&A

解決済

4回答

4225閲覧

JAVA for文を用いた数字を並べるプログラム

ashura

総合スコア17

Java

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

0グッド

0クリップ

投稿2021/07/02 10:14

前提・実現したいこと

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のような数字を並べるプログラムを作成したいです。

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

ですが、00 01 02 03 04 05 06 07 08 09
100 101 102 103 104 105 106 107 108 109
200 201 202 203 204 205 206 207 208 209
300 301 302 303 304 305 306 307 308 309
400 401 402 403 404 405 406 407 408 409
500 501 502 503 504 505 506 507 508 509
600 601 602 603 604 605 606 607 608 609
700 701 702 703 704 705 706 707 708 709
800 801 802 803 804 805 806 807 808 809
900 901 902 903 904 905 906 907 908 909のようになりうまく繰り返し処理がされません。

該当のソースコード

JAVA ここに言語名を入力
ソースコード
class Ex1_10_3 {
public static void main (String[] args){
for ( int i = 0 ; i <=90 ;i+=10){
for ( int j = 0 ; j <=9 ; j++){
System.out.print(" " + i + j);
}

System.out.println(); } }

}

試したこと

ネットで数字の表を作成しているものなどを拝見しましたが、いまいちわかりませんでした。かなり初歩的なつまずきだと思いますが、ご教授いただけると幸いです。

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

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

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

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

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

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

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

guest

回答4

0

900 901 902 903 904 905 906 907 908 909のようになりうまく繰り返し処理がされません。

これは System.out.print(" " + i + j);のコードにより " " + i + jでそれぞれStringとして結合されてしまう為です。

2桁のゼロパディング、10進数の文字列というように書式を統一して出力したい場合、System.out.printfString.formatメソッドを使うと簡単です。C言語のprintf関数と同じような用途で使えます。

PrintStream#printf - JavaSE 8
System.out.printfPrintStream#printfです。

String#format - JavaSE 8

Java

1// こうではなく 2// System.out.print(" " + i + j); 3// こうする 4System.out.printf(" %02d", i + j); 5// これでも可 6System.out.print(String.format(" %02d", i + j)); 7

投稿2021/07/02 10:48

dodox86

総合スコア9183

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

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

0

for ( int j = 0 ; j <=99 ; j++){
System.out.print(" " + j);
}

でいいんじゃね

投稿2021/07/02 10:21

y_waiwai

総合スコア87774

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

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

0

java

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

実行例
イメージ説明

投稿2021/07/02 21:21

katoy

総合スコア22324

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

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

0

ベストアンサー

まず、プログラミングは「こう書けばいい」……ではありません。

プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である』です。

つまり、『現実世界でならどうするか』です。

質問にある内容を、プログラミングとかは置いといて、現実世界で、手作業でやると考えてください。

それを実装すればいいだけです。

まずはノートでもいいし、ホワイトボードでもなんでもいいので、これに書いていくと考えます。

今回はホワイトボードだとします。

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

と書くのですが、そのまま書くこともできますが、『規則性』を見付けてみましょう。

縦の個数、横の個数を調べてみましょう。

縦: 00 ~ 09 等の 10個
横: 00 ~ 90 等の 10個

つまり、10×10 の行列と考えられますね。

そして、次は一行目( 00~09 ) に着目しましょう。

00~09 までの 10個、数字が +1 して行っています。

次に二行目( 10~19 ) に着目しましょう。

10から 19 までを +1 して行ってます。(10個分)

で開始の数字は 10 。前の行の最後は 09 ですね。
関係性を見ると、『前回の行の最後の数字に +1 した数字から始まっている』ですね。

さらに次の 三行目( 20~29 ) を見ても、『前回の行の最後の数字に +1 した数字から始まっている』で、
かつ『10個分、+1して行っている』ですね。

列も見てもいいですが、今回はあまり関係なさそうですね。(無くはないが、考えなくても行けそう)

つまり、

■ 10×10 の行列であり、
■ 最初の行は00から始まり、10個分出力する
■ 二行目以降は 前回の行の最後の数字に +1 した数字から始まる

ということがわかりました。

ですが、最初の行の 00~09 はちょっと変ですね。

おそらく、二行目以降が 10 とかみたいな二桁台なので、そろえる為でしょうね。

一桁を二桁にするにはどうすればいいでしょうか。

3 を 03 にするのです。

そう、『一桁台なら 前に '0' を付ける』ですね。

一桁台とはなんでしょうか。

数直線を書いて考えてみてください。

負の数は考慮せず、正の数だけだとすると、0≦数字<10 ですよね。

(10は含まない事に注意)

では、0≦数字<10 とはなんでしょうか。

これも数直線で考えてみてください。

そうすると、

数字が0以上 『かつ』 数字が 10未満

と考えられますね。(集合と論理のやつ)

よって、

規則性1: 10×10 の行列であり、
規則性2: 最初の行は00から始まり、10個分出力する
規則性3: 二行目以降は 前回の行の最後の数字に +1 した数字から始まる
規則性4: 一桁台の場合は前に '0' を追加する

となります。

ここまでで規則性がわかりましたので、実際にホワイトボードに書いてみましょう。

まずは一行目。

0 から始まっているので、規則性4から

00 01 02 03 04 05 06 07 08 09

となりますね。

規則性3のため、最後に書いた数字( 9 ) をホワイトボードの余白に書いておく。
これを『記録X』としておく。

次に二行目。

規則性3のため、先ほど書いた記録Xの値 に +1 した数字( 10 ) から開始する。

でも 規則性4 の条件には該当しないため、そのまま書く。

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19

最後に使った数字 ( 19 ) を記録X として更新する ( 9 -> 19 )

更に三行目も同様にやる。

規則性3のため、先ほど書いた記録Xの値 に +1 した数字( 20 ) から開始する。

でも 規則性4 の条件には該当しないため、そのまま書く。

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

最後に使った数字 ( 29 ) を記録X として更新する ( 19 -> 29 )

……と10行目までやると、最終的に

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

となるはずです。

これをJavaならJava、C言語ならC言語……と言う風にそれぞれの言語の書き方で、書き下すだけです。

1行から10行までを……っていうのはfor文で出来そうですね。

1個目から10個目を……もfor文で、(入れ子状態で)出来そうですね。

現実世界だと『ホワイトボードの余白に』書いた記録X については『変数』で実装できそうですね。

もう、ここまで書けば、答えを書いたようなものです。

投稿2021/07/02 11:55

編集2021/07/02 16:47
BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問