1

变量 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);             
                 }
              }
           }
        }
     } 
4

1 回答 1

3

你被 Java 忠实继承的 C/C++ 主义所刺痛——能够通过在其后放置一个分号来立即结束 for、while 或 if。

如下所示的代码:

for(whatever);
{
   doThing()
}

实际上是这样做的:

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

2) 分号告诉编译器“这是 for 循环的结束”,因此 for 循环会疯狂地迭代,直到条件评估为 false。

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

2) 可能的原因是 if、for、while 等在语法上被定义为只执行一件事情——下一条语句。A;是一个什么都不做的语句——把它想象成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
于 2013-04-17T01:24:46.987 回答