嵌套'for循环未正确初始化

时间:2013-04-17 01:20:26

标签: java

变量j初始化为172,这是它应该迭代的wordList的长度。 wordList是一个ArrayList感谢您的帮助。

for (i = 0; i < wordList.size(); i++)
     {
        row0 = wordList.get(i);
        ara = breakWord(row0);
        my2Dara[0] = ara;

            for (j = 0; j < wordList2.size(); j++);
        {
           row1 = wordList2.get(j);
           ara = breakWord(row1);
           my2Dara[1] = ara;

                for (k = 0; k < wordList.size(); k++);
           {
              row2 = wordList.get(k);
              ara = breakWord(row2);
              my2Dara[2] = ara;

                    for (l = 0; l < wordList.size(); l++);
              {
                 row3 = wordList.get(l);
                 ara = breakWord(row3);
                 my2Dara[3] = ara;

                 for (m = 0; m < wordList.size(); m++);
                 {
                    row4 = wordList.get(m);
                    ara = breakWord(row4);
                    my2Dara[4] = ara;

                    if(isSolution(my2Dara, wordList) == true)
                       print2Dara(my2Dara);             
                 }
              }
           }
        }
     } 

1 个答案:

答案 0 :(得分:3)

你已经被Java忠实继承的C / C ++主义所诅咒 - 结束for的能力,或者立即通过在其后面加一个分号来结束。

代码如下:

for(whatever);
{
   doThing()
}

实际上是这样做的:

1)设置for循环 - 执行初始化程序,检查我们是否可以执行第一个循环

2)分号告诉编译器'这是for循环的结束',因此for循环迭代迭代而不做任何事情,直到条件评估为false。

3)之后的大括号{}中的部分执行一次 - 这不是编译器错误,因为您可以随时出于任何原因或多或少地放置大括号对(这用于声明新的作用域,有点像如果你创建一个新的变量范围 - 它不是if,它是大括号!)

2)可能的原因是因为if,for,while等在语法上被定义为只执行一件事 - 下一个语句。 ;是一个不做任何事情的陈述 - 将其视为doSomething();而没有doSomething()部分。 { doX(); doY(); }也是一个语句 - 大括号可以被认为是将大量语句定义为一个语句的语法。编译器忠实地做你键入的内容。

2)和3)的结果是所有这些东西在语法上都是有效的,通常不符合你的预期:

for(whatever);

if(true);

if(false);
{
    crashProgram(); //This will always execute! Good prank to play on computer science undergrads
}

{
   doThing(); //don't need an if, for, while or anything else to open {}s
}

{
 {
  {
    doThing(); //open as many as you like!
  }
 }
}

;;;;;;; //do a whole lot of nothing