@ortyyy (Kawaki Ruida)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Java ネスティング 質問 【初心者】

解決したいこと

javaのネスティングで、0から始まり、最初は5まで行くのに、徐々に減っていくプログラムを書きたいのですが、うまくかけずで、ご教示いただきたいです。

得たい出力結果

得たい出力結果

(0, 0)(0, 1)(0, 2)(0, 3)(0, 4)(0, 5)

(1, 0)(1, 1)(1, 2)(1, 3)(1, 4)

(2, 0)(2, 1)(2, 2)(2, 3)

(3, 0)(3, 1)(3, 2)

(4, 0)(4, 1)

(5, 0)

コード

今のコード:
public class Main {
    public static void main(String[] args) throws Exception {
        int i, j;
        for(i=0; i <= 5; i++){
            for(j=0; j>i; j--){
                System.out.print("( " + i + ", " + j + ")" );
            }
            System.out.print("\n");
        }
    }
}

### 発生している問題

これだと出力結果が
( 0, 5)( 0, 4)( 0, 3)( 0, 2)( 0, 1)

( 1, 5)( 1, 4)( 1, 3)( 1, 2)

( 2, 5)( 2, 4)( 2, 3)

( 3, 5)( 3, 4)

( 4, 5)

となり、出力結果は0から始まっているのに最初の行では5まで出力され、j--で減っていくという形になってしまっていて、よくわからない状況です。

該当するソースコード

java

よろしくお願いいたします。可能であれば、初心者でも分かる形でご教示頂けますと幸いです。

 

0 likes

2Answer

jのfor文の条件が間違っているのが原因かと思います。

for(i=0; i <= 5; i++){
    for(j=0; j>i; j--){

ちなみに私の環境では全く出力がprintされませんでした。
j=0で初期化していて、j>iの条件を満たすケースがないため、掲載されているコードではprintされないのでは?と思います。

以下のように書き換えたらできました。

public class Main {

    final static int loopnum = 5;
    public static void main(String[] args) throws Exception {
        int i, j;
        for(i=0; i<=loopnum; i++){
            for(j=0; j<=loopnum-i; j++){
                System.out.print("( " + i + ", " + j + ")" );
            }
            System.out.print("\n");
        }
    }
}
実行結果
$ java Main 
( 0, 0)( 0, 1)( 0, 2)( 0, 3)( 0, 4)( 0, 5)
( 1, 0)( 1, 1)( 1, 2)( 1, 3)( 1, 4)
( 2, 0)( 2, 1)( 2, 2)( 2, 3)
( 3, 0)( 3, 1)( 3, 2)
( 4, 0)( 4, 1)
( 5, 0)
1Like

Comments

  1. @ortyyy

    Questioner

    ありがとうございます、大変わかりやすい回答ありがとうございます!私の方でも出力が得られました!

多重ループでは、それぞれの要素でやりたいことと、要素同士の関係性をひとつずつ分解して考えるとよいです。
今回の場合、

  • iは0から始まり、1ずつ増え(単調増加)、5で終わる
  • jは0から始まり、1ずつ増え(単調増加)、5-iで終わる(i行目)

for文というのはfor(初期化式; 条件式; 変化式) からなります。
上記はそれぞれ「初期化式」「変化式」「条件式」です。
それらを式に直してみると、こうなります。

  • for(i=0; i<=5; i++)
  • for(j=0; j<=5-i; j++)

なので、ここでやりたいことは以下のように書くことができます。

for(i=0; i<=5; i++) {
  for(j=0; j<=5-i; j++)
    System.out.print("( " + i + ", " + j + ")" );
  }
  System.out.print("\n");
}
1Like

Comments

  1. @ortyyy

    Questioner

    ご回答ありがとうございます、ループ文の意味まで、大変勉強になりました!

Your answer might help someone💌