我需要编写一个程序来遍历Javascript中的迷宫,其中1是源,2是目的地,3是路径,0是墙。下面是我编写的代码。该代码是正确的,但是只有在使用console.log()时我才能得到答案,而在返回字符串yes或no时则无法得到答案。为什么会这样呢?
function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
for (var j=0;j<arr[i].length; j++) {
if (arr[i][j] == 1) {
traverse(i,j);
break;
}
}
}
function traverse(rowPos, colPos) {
if (arr[rowPos][colPos] == 2) {
console.log("yes");
// return "Yes";
}
else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
arr[rowPos][colPos] = 9;
if(rowPos < arr.length - 1) {
return traverse(rowPos + 1, colPos);
}
if(colPos < arr[rowPos].length - 1) {
return traverse(rowPos, colPos + 1);
}
if(rowPos > 0) {
return traverse(rowPos - 1, colPos);
}
if(colPos > 0) {
return traverse(rowPos, colPos - 1);
}
}
else if (arr[rowPos][colPos] == 0) {
console.log("No");
// return "No";
}
}
}
输入
arr = [[3, 0, 0, 0], [0, 3, 3, 0], [0, 1, 0, 3], [0, 2, 3, 3]];
answer = sourceDes(arr);
answer;
在console.log()
时输出yes
返回值并在功能上应用console.log时输出
undefined
答案 0 :(得分:1)
您缺少sourceDes
函数中的return语句
答案 1 :(得分:1)
return语句应该在两个函数中,否则返回未定义
答案 2 :(得分:1)
在Javascript中,当您在函数内省略return语句时,将假定为隐式return undefined
。这就是为什么您获得此返回值。
答案 3 :(得分:1)
我检查了您的代码,并在sourceDes函数中发现了一个错误。您没有在函数中定义return语句。
function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
for (var j=0;j<arr[i].length; j++) {
if (arr[i][j] == 1) {
traverse(i,j);
break;
}
}
}
最后一次运行循环时,您的if条件变为false,这就是为什么要重试 undefined 的原因。检查下面的代码,我添加了else部分,如果条件为false,则返回否。
arr = [[3, 0, 0, 0], [0, 3, 3, 0], [0, 1, 0, 3], [0, 2, 3, 3]];
function sourceDes(arr) {
for (var i=0;i<arr.length;i++) {
for (var j=0;j<arr[i].length; j++) {
if (arr[i][j] == 1) {
traverse(i,j);
break;
}
else{
return "No";
}
}
}
function traverse(rowPos, colPos) {
if (arr[rowPos][colPos] == 2) {
console.log("yes");
return "Yes";
}
else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
arr[rowPos][colPos] = 9;
if(rowPos < arr.length - 1) {
return traverse(rowPos + 1, colPos);
}
if(colPos < arr[rowPos].length - 1) {
return traverse(rowPos, colPos + 1);
}
if(rowPos > 0) {
return traverse(rowPos - 1, colPos);
}
if(colPos > 0) {
return traverse(rowPos, colPos - 1);
}
}
else if (arr[rowPos][colPos] == 0) {
console.log("No");
return "No";
}
}
}
answer = sourceDes(arr);
document.write(answer);
答案 4 :(得分:0)
使用以下代码段。我已经添加了变量并在循环中设置了值,并在函数末尾返回了结果变量。
function sourceDes(arr) {
var result='';
for (var i=0;i<arr.length;i++) {
for (var j=0;j<arr[i].length; j++) {
if (arr[i][j] == 1) {
result= traverse(i,j);
break;
}
}
return result;
}
function traverse(rowPos, colPos) {
if (arr[rowPos][colPos] == 2) {
//console.log("yes");
return "Yes";
}
else if (arr[rowPos][colPos] == 3 || arr[rowPos][colPos] == 1) {
arr[rowPos][colPos] = 9;
if(rowPos < arr.length - 1) {
return traverse(rowPos + 1, colPos);
}
if(colPos < arr[rowPos].length - 1) {
return traverse(rowPos, colPos + 1);
}
if(rowPos > 0) {
return traverse(rowPos - 1, colPos);
}
if(colPos > 0) {
return traverse(rowPos, colPos - 1);
}
}
else if (arr[rowPos][colPos] == 0) {
//console.log("No");
return "No";
}
}
}