1
public class VarNoOfCols {
    public static void main(String[] args) {
        int a[][] = new int[3][];

        a[0]=new int[3];
        a[1]=new int[2];
        a[2]=new int[1];
        int temp=3;
        for(int i =0; i<3;i++) {
            for(int k=0;k<temp;k++) {
                a[i][k]= k*10;
                           temp-- ;
            }


        }
    }
}

--- ---- と想定した出力は以下のとおり --- しかし、これは正しくありません。

(0 0) 0  (0 1) 10
(1 0) 0  (1 1) 10
(2 0) 0  (2,1) 10

私はこれが間違っていることを知っています。(私の質問は - 2回目の反復を完了すると、「k」は「temp」よりも大きく、条件が失敗すると、内部ステートメントを停止し、次のジョブを実行します(それが何であれ)。なぜ私は (0, 2) = 20 で、(2,1) = 10 が表示されないのはなぜですか?

正しい出力を確認できます。

(0 0) 0  (0 1) 10 (0 2) 20
(1 0) 0  (1 1) 10
(2 0) 0

私は学習者であり、ここで誰かの助けに本当に感謝しています. ありがとうございました

4

4 に答える 4

1

次のようにコードを変更します。

for(int i =0; i<3;i++)
{
    for(int k=0;k<3;k++)
        a[i][k]= k*10;

}

temp正方形の出力が必要な場合、各反復で出力されるエントリの数を変更する制御変数を使用するのはなぜiですか?

于 2012-05-05T10:35:20.920 に答える
0

これは、temp と k

あなたのプログラムで最初に i=0

  1. k=0,temp=3 then (0 0) なので 0*10 = 0 を出力
  2. k=1,temp=2 then (0 1) なので、出力 1*10 = 10
  3. k=2,temp=1 条件 for ループで false (外側の for ループ (i を持つ) の条件は正しいが、内側の for ループでは条件 k

i=1

  1. k=0,temp=3 then (1 0) なので、出力 0*10 = 0
  2. k=1,temp=2 then (1 1) なので、出力 1*10 = 10

i=2

  1. k=0,temp=3 then (2 0) なので 0*10 = 0 を出力します
  2. k=1,temp=2 then (2 1) なので、出力 1*10 = 10

の必要はありませんtemp。正しい出力を取得するには、これを使用します

for(int i =0; i<3;i++)
{
   for(int k=0;k<3;k++)
      a[i][k]= k*10;

}
于 2012-05-05T10:36:04.667 に答える
0

実際には、最後の編集 (2 番目の temp を使用) では、最初の出力も 2 番目の出力も得られません。

なんで?

再割り当てすることはなくtemp、3 回後に減分されるため、2 番目のループは実行されなくなります。したがって、(0;0) (0;1) と (1;0) のみの値が得られます。

出力 1 (平方 1) が得られないのはなぜですか?

a[2] have a size of 1 so you can't have something in (2;1)

2番目の出力を取得するには?

を 2 番目のループに入れずtemp--、2 番目のループの後 (最初のループの最後) に入れます。

于 2012-05-06T08:57:46.103 に答える