需要在for循环中将变量再次初始化为零

时间:2014-06-07 06:38:45

标签: java loops

这是我的代码。当从两个字符串中删除特定字符时,我需要将i值再次初始化为零。这里sb表示用户输入的第一个字符串,sb1表示用户输入的第二个字符串。当两个字符在比较时相同时,应从两个字符串中删除char,并且i的值应重新初始化为零,并开始从第一个字符串的第一个字符与第二个字符串的第一个字符进行比较。一切正常,但i的值不会再次初始化为零,而是会增加。

for (i = 0; i < sb.length(); i++) {
    for (j = 0, d = 0; j < sb1.length(); j++) {
        if (sb.charAt(i) == sb1.charAt(j)) {
            sb.deleteCharAt(i);
            i = 0;
            System.out.println("the buff=" + sb);

            sb1.deleteCharAt(j);
            System.out.println("the buff=" + sb1);

            break;
        }
    }
}

5 个答案:

答案 0 :(得分:3)

for循环有四个部分:

  • 初始化

  • 测试

  • 增量

前三个是您在()之后放入if的三个部分,由;分隔,第四个当然是循环内的代码块。

他们像这样运行:初始化,测试,身体,增量,测试,身体......

当你的代码在循环体中将i设置为0时,这是有效的,但随后增量发生,递增i。因此,如果您打算这样做,在打开j循环之前,您需要将i设置为一个值,以便在增量发生时,它最终为{{1在你的情况下,那是0

但总的来说,如果您正在使用索引,-1可能不是最好的循环结构。在这种情况下,例如,for可能是更好的选择,我不认为你必须在while重新开始,这只是当你删除一个字符,您不想增加索引:

0

我不太确定为什么你在循环中有一个循环。你还没有说过循环应该做什么,但我认为你不需要两个循环来做它。

例如,如果目标是从i = 0; while (i < sb.length()) { j = 0; while (j < sb1.length()) { if (sb.charAt(i) == sb1.charAt(j)) { sb.deleteCharAt(i); sb1.deleteCharAt(j); } else { ++j; ++i; } } } sb的开头删除常用字符,则不需要两个循环:

sb1

答案 1 :(得分:0)

将-1设为i

     for (i = 0; i < sb.length(); i++) {
        for (j = 0, d = 0; j < sb1.length(); j++) {
            if (sb.charAt(i) == sb1.charAt(j)) {
                sb.deleteCharAt(i);                   
                System.out.println("the buff=" + sb);
                sb1.deleteCharAt(j);
                System.out.println("the buff=" + sb1);
                i=-1;
                break;
            }
        }

    }

因此它会在重启时递增并变为零。

答案 2 :(得分:0)

简单地使用while循环,更改for循环中的迭代器是一种相当不好的做法(它应该是恒定长度循环)。

int i=0;
while (i < sb.length()) {
    for (j = 0, d = 0; j < sb1.length(); j++) {
        if (sb.charAt(i) == sb1.charAt(j)) {
            sb.deleteCharAt(i);                   
            System.out.println("the buff=" + sb);
            sb1.deleteCharAt(j);
            System.out.println("the buff=" + sb1);
            i=-1; // It will increment few lines lower so we need to make it equal to -1
            break;
        }
    }
    ++i;
}

答案 3 :(得分:0)

在循环中,你使用后增量运算符。因此,在迭代结束时,它将增加值。这是后期增量的工作原理。因此,将其设为-1将解决您的问题。

for(i = 0; i&lt; sb.length(); i ++){

        for (j = 0, d = 0; j < sb1.length(); j++) {

            if (sb.charAt(i) == sb1.charAt(j)) {
                sb.deleteCharAt(i);
                i=-1;
                System.out.println("the buff=" + sb);

                sb1.deleteCharAt(j);
                System.out.println("the buff=" + sb1);



                break;
            }
        }

    }

答案 4 :(得分:0)

 int z=1;
 for (int i = 0; i < 5; i++)
 {
      if (z == 0)
      {
           i = 0;
      }
      for (int j = 0; j < 5; j++)
      {
           if(condition)
           {
                z=1;
           }
           else
           {
                z = 0;
           }

      }
 }