0

パターンを印刷するクラスを作成しました。

1
2   4
3   6   9
4   8   12  16
5   10  15  20  25

コードは次のとおりです。

public class pat2
{
    public void method()
    {
        int row = 1;
        int val = 0;

        for(row=1;row<=5;row++)
        {
            for(val=1;val<=row;val=row*val)
            {
                System.out.print(val);
            }

            System.out.println();
        }
    }
}

と の関係は であることがわかりrowましvalval = row*val。このロジックを使用して、ネストされたループを作成しました。ただし、目的の出力が得られず、代わりに無限1の出力が得られました。私の問題は 2 番目のforループの文言にあると確信しています。特定するのを手伝ってもらえますか?

4

7 に答える 7

1

2 番目の for ループでは、 for(val=1;val<=row; val=row*val )。

val=row*valはコードを無限ループにし、終了しません。

次のようなコードを使用する必要があります。

public void method() {
    int row = 1;
    int val = 0;

    for (row = 1; row <= 5; row++) {
        for (val = 1; val <= row; val++) {
            System.out.printf("%2d ", row * val);
        }
        System.out.println();
    }
}

コンソールの出力は次のとおりです。

1 
2  4 
3  6  9 
4  8 12 16 
5 10 15 20 25 
于 2013-11-11T16:23:10.503 に答える
1

val=row*valこれは、インクリメント フェーズでは実行できません。これにより、予想されるすべてのアルゴリズムの境界がオーバーフローします。

これがあなたが望むものだと思います:

for(val=1;val<=row;val++)
{
    System.out.print(val*row);
}
于 2013-11-11T16:15:49.213 に答える
1

2 番目のループを次のように置き換えるだけです。

for(val = 1; val <= row; val++) {
    System.out.print( val * row + "\t" );
}
于 2013-11-11T16:16:33.747 に答える
0

for ループでの使用val=val*rowは、for ループの使用方法に関する大きな誤解です。一貫したカウントでループ カウンターをインクリメントする必要があります。現在の解決策を紙に書き出すと、val が常に 1 になることがわかります。したがって、ループから抜け出すことはなく、常に「1」が出力されます。

次のようにコードを修正できます。

public class pat2
{
    public void method()
    {
        for(int row=1; row<=5; row++)
        {
            for(int column=1; column<=row; column++)
            {
                System.out.print(row * column);
            }
            System.out.println();
        }
    }
}
于 2013-11-11T16:19:32.390 に答える
0

あなたは近くにいます。行ごとに値をインクリメントしたい内側のループですが、ループカウンターをそれほどインクリメントしたくありません。「val」変数の名前を「col」に変更しました。何が起こっているのかがより明確になったと思います。

public class pat2
{
    public void method()
    {
        int row = 1;
        int col = 1;

        for(row=1;row<=5;row++)
        {
            for(col=1;col<=row;++col)
            {
                System.out.print(col*row);
            }

            System.out.println();
        }
    }
}
于 2013-11-11T16:15:36.317 に答える