0

我对 Java 很陌生,也许我的问题有点烦人。

我的代码中有两个循环,我想通过-语句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

给你:

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 回答
3

只需使用continue关键字..它将继续下一次迭代..无需标记您的循环..因为您没有从内部循环继续外部循环..或者,如果您想continue使用外部循环,您可以使用continuewith一个标签...

你应该使用你的 for 循环j = 0 to j < z1..

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 letterunderscore.. 开头(Z1 -> z1)

于 2012-10-08T09:06:37.650 回答
1

-在您上面的代码中,您可以使用 2 种方法来做到这一点......

第一种方法:没有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){


         }
      }
    }
  }

第二种方法: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 回答