【发布时间】:2018-04-30 14:37:46
【问题描述】:
我有一个 while 循环,它是针对某个数组路径的算法,我在 javaScript 中创建了它。这是代码。
var Row1 = [0, 0, 0, 0, 0];
var Row2 = [0, 0, 0, 0, 0];
var Row3 = [0, 0, 0, 0, 0];
var Row4 = [0, 0, 0, 0, 0];
var Row5 = [0, 0, 0, 0, 0];
var AllRows = [];
//Add Rows
AllRows.push(Row1, Row2, Row3, Row4, Row5);
console.log(AllRows);
//First Value
var SV1 = [0, (AllRows.length - 1)];
var SV2 = [0, (AllRows.length - 1)];
var GetSV1 = Math.floor(Math.random()*(SV1.length - 1));
var GetSV2 = Math.floor(Math.random()*(SV2.length - 1));
AllRows[GetSV1][GetSV2] = 1;
var Steps = 1;
var PD = "false";
var RV1 = null;
var RV2 = null;
while(PD == "false"){
RV1 = Math.floor(Math.random()*(AllRows.length - 1));
RV2 = Math.floor(Math.random()*(AllRows.length - 1));
if(AllRows[RV1][RV2] == AllRows[GetSV1][GetSV2] || AllRows[RV1][RV2] == "X"){
continue;
} else {
AllRows[RV1][RV2] = 1;
}
if(AllRows[0][0] == 1){
if(Steps >= 1 && AllRows[0][1] == 1){
AllRows[1][0] = "X";
Steps++;
continue;
} else if(Steps >= 1 && AllRows[1][0] == 1){
AllRows[0][1] = "X";
Steps++;
continue;
} else{
AllRows[0][1] = 0;
AllRows[1][0] = 0;
AllRows[GetSV1][GetSV2] = 0;
}
if(Steps >= 2 && AllRows[0][2] == 1){
AllRows[1][1] = "X";
Steps++;
continue;
} else if(Steps >= 2 && AllRows[1][1] == 1){
AllRows[0][2] = "X";
AllRows[2][0] = "X";
Steps++;
continue;
} else if(Steps >= 2 && AllRows[2][0] == 1){
AllRows[1][1] = "X";
Steps++;
continue;
} else{
AllRows[0][2] = 0;
AllRows[1][1] = 0;
AllRows[2][0] = 0;
AllRows[GetSV1][GetSV2] = 0;
}
if(Steps >= 3 && AllRows[0][3] == 1){
AllRows[1][2] = "X";
Steps++;
continue;
} else if(Steps >= 3 && AllRows[1][2] == 1){
AllRows[0][3] = "X";
AllRows[2][1] = "X";
Steps++;
continue;
} else if(Steps >= 3 && AllRows[2][1] == 1){
AllRows[3][0] = "X";
AllRows[1][2] = "X";
Steps++;
continue;
} else if(Steps >= 3 && AllRows[3][0] == 1){
AllRows[2][1] = "X";
Steps++;
continue;
} else{
AllRows[0][3] = 0;
AllRows[1][2] = 0;
AllRows[2][1] = 0;
AllRows[3][0] = 0;
AllRows[GetSV1][GetSV2] = 0;
}
if(Steps >= 4 && AllRows[0][4] == 1){
AllRows[1][3] = "X";
Steps++;
continue;
} else if(Steps >= 4 && AllRows[1][3] == 1){
AllRows[0][4] = "X";
AllRows[2][2] = "X";
Steps++;
continue;
} else if(Steps >= 4 && AllRows[2][2] == 1){
AllRows[3][1] = "X";
AllRows[1][3] = "X";
Steps++;
continue;
} else if(Steps >= 4 && AllRows[3][1] == 1){
AllRows[2][2] = "X";
AllRows[4][0] = "X";
Steps++;
continue;
} else if(Steps >= 4 && AllRows[4][0] == 1){
AllRows[3][1] = "X";
PD = null;
} else{
AllRows[0][4] = 0;
AllRows[1][3] = 0;
AllRows[2][2] = 0;
AllRows[3][1] = 0;
AllRows[4][0] = 0;
AllRows[GetSV1][GetSV2] = 0;
}
if(Steps >= 5 && AllRows[1][4] == 1){
AllRows[2][3] = "X";
Steps++;
continue;
} else if(Steps >= 5 && AllRows[2][3] == 1){
AllRows[1][4] = "X";
AllRows[3][2] = "X";
Steps++;
continue;
} else if(Steps >= 5 && AllRows[3][2] == 1){
AllRows[4][1] = "X";
AllRows[2][3] = "X";
Steps++;
continue;
} else if(Steps >= 5 && AllRows[4][1] == 1){
AllRows[3][2] = "X";
PD = null;
} else{
AllRows[1][4] = 0;
AllRows[2][3] = 0;
AllRows[3][2] = 0;
AllRows[4][1] = 0;
AllRows[GetSV1][GetSV2] = 0;
}
if(Steps >= 6 && AllRows[2][4] == 1){
AllRows[3][3] = "X";
Steps++;
continue;
} else if(Steps >= 6 && AllRows[3][3] == 1){
AllRows[2][4] = "X";
AllRows[4][2] = "X";
Steps++;
continue;
} else if(Steps >= 6 && AllRows[4][2] == 1){
AllRows[3][3] = "X";
PD = null;
} else{
AllRows[2][4] = 0;
AllRows[3][3] = 0;
AllRows[4][2] = 0;
AllRows[GetSV1][GetSV2] = 0;
}
if(Steps >= 7 && AllRows[3][4] == 1){
AllRows[4][3] = "X";
Steps++;
continue;
} else if(Steps >= 7 && AllRows[4][3] == 1){
AllRows[3][4] = "X";
PD = null;
} else if(Steps >= 7 && AllRows[4][4] == 1){
PD = null;
} else{
AllRows[3][4] = 0;
AllRows[4][3] = 0;
AllRows[4][4] = 0;
AllRows[GetSV1][GetSV2] = 0;
}
}else{
break;
}
}
}
由于我无法解决问题,我无法找出导致此无限循环的原因,但我知道它可能与 RV1 和 RV2 的声明有关。谁能告诉我代码在哪里让它永远循环?
更新我添加了我的完整代码以帮助我们进一步了解问题。
【问题讨论】:
-
使你的代码永远循环的部分是
while(true)。您应该使用调试器单步执行此代码 - 您将能够跟随并确切了解为什么此循环永远不会到达您的返回值。 -
一个更好的问题是不应该让它永远循环。我看到两种情况,你
return而不是continue。是什么让你认为它应该触及这些界限?你能做些什么来保证它会? -
您可以使用
return或continue省略else,因为它结束了条件而无需进入其余的代码/循环。 -
while(true)这可能与它有关。 -
@Chase 我取出了
while(true),但它仍然无限循环。
标签: javascript while-loop