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