0

私は Java に非常に慣れていないので、私の質問は少しイライラするかもしれません。

コードに 2 つのループがあり、それぞれの先頭に-ステートメントforで移動したいと考えています。forelse

public static void main(String[] args)
{
    int[][] x=new int[1000][1000];

    int[] Z=new int[1000];

    lable1:
        for(int i=1; i<=1000; i++)
        {
            Z[i]=rand1.nextInt(1000);
            System.out.println("Z["+i +"] = " + Z[i] );

            if(Z[i]>0 && Z[i]<=Nk)
            {
                int Z1=Z[i]-1;
                lable2:         
                    for(int j = 1; j<=Z1;j++ )
                    {
                        x[i][j]= rand2.nextInt(1000);
                        sum+=x[i][j];
                        if( sum<1000)
                        {
                            x[i][(j+1)]=1000-sum;
                            System.out.println("x[" + i+"][" + j + "] = " + x[i][j]);
                            System.out.println("Nx[" + i+"][" + (j+1) + "] = " +x[i][(j+1)]);
                        }
                        else{
                            // ????
                            //Goto lable2;
                        }
                    }
            }
            else{
                //goto label1;
                // ????
            } 
        }

}
4

4 に答える 4

6

break以下を使用して、(スコープ内の)任意の定義済みラベルに移動できます。

break label;

同じことが。にも当てはまりますcontinue

ここに読むべきものがあります。

あなたの特定の例では、elsesを削除することはあなたが望むことをするでしょう。

于 2012-10-08T09:04:39.897 に答える
3

continueキーワードを使用するだけです..次の反復に続きます..ループにラベルを付ける必要はありません..内側のループから外側のループを継続していないため..または、外側のループを使用したい場合は、withcontinueを使用できますラベル... continue_

j = 0 to j < z1そして、 ..から for ループを使用する必要があります。

for(int j = 0; j < Z1;j++ ) {    
      if( sum<1000) {
           x[i][(j+1)]=1000-sum;
           System.out.println("x[" + i+"][" + j + "] = " + x[i][j]);
           System.out.println("Nx[" + i+"][" + (j+1) + "] = " +x[i][(j+1)]);
       }
       else{  // Not needed if your else does not contain anything else..
           continue;
       }
}

else実際、ブロックはまったく必要ありません..それ以上の処理を行っていない場合..

削除するだけです..自動的にループに移動します..

提案lowercase letter: - コーディング規約を使用する必要があります..変数名はorで始まりunderscoreます.. (Z1 -> z1)

于 2012-10-08T09:06:37.650 に答える
3

はい、どうぞ:

public static void main(String[] args) {
        int[][] x = new int[1000][1000];

        int[] Z = new int[1000];

        boolean resetOuterCycle = true;

        for (int i = 0; i < 1000; i++) {
            Z[i] = rand1.nextInt(1000);
            System.out.println("Z[" + i + "] = " + Z[i]);

            if (Z[i] > 0 && Z[i] <= Nk) {
                int Z1 = Z[i] - 1;

                boolean resetInnerCycle = true;

                for (int j = 0; j < Z1; j++) {
                    x[i][j] = rand2.nextInt(1000);
                    sum += x[i][j];
                    if (sum < 1000) {
                        x[i][(j + 1)] = 1000 - sum;
                        System.out.println("x[" + i + "][" + j + "] = " + x[i][j]);
                        System.out.println("Nx[" + i + "][" + (j + 1) + "] = " + x[i][(j + 1)]);
                    } else if (resetInnerCycle) {
                        j = 0;
                        resetInnerCycle = false;
                    }
                }
            } else if (resetOuterCycle) {
                i = 0;
                resetOuterCycle = false;
            }
        }

    }
于 2012-10-08T09:09:19.927 に答える
1

-上記のコードでは、2つのアプローチを使用してそれを行うことができます...

1stアプローチelse:ノーパート

for (int i = 0; i < 1000; i++) {

   if (Z[i] > 0 && Z[i] <= Nk){
    for (int j = 0; j < Z1; j++) {

          if(sum < 1000){


         }
      }
    }
  }

第 2 のアプローチ :elseパーツとcontinue

for (int i = 0; i < 1000; i++) {

   if (Z[i] > 0 && Z[i] <= Nk){

    for (int j = 0; j < Z1; j++) {

              if(sum < 1000){


             }else{

                  continue;

             }
          }
       }else{

               continue;

        }
   }
于 2012-10-08T09:43:25.947 に答える