更新:我添加了小提琴。请参考here。使用Web控制台进行错误。
我正在编写旅行商问题的代码。这是代码:
var ind =[]; //values selected
var cp =[];
var X;
var Y;
var tour = [];
// no values selected in the starting
for(j=0;j<friends_cnt;j++) {
ind[j] = 0;
}
// distances at i,i infinity
for(i=0;i<friends_cnt;i++) {
distance[i][i] = 9999999999999;
}
var k = 0;
var X = 0;
tour[k] = X;
ind[X] = 1;
var i =1;
while(i<friends_cnt && ind[i] === 0) {
var min = 9999999999999;
// finding minimum of the undeleted values
for(j=0;j<friends_cnt;j++) {
if(ind[j] === 0) {
if(distance[X][j] < min) {
min = distance[X][j];
Y = j; // y is the min city
}
}
}
k = k+1; // counter for the starting city
tour[k] = Y; //city added
ind[Y] = 1;
X = Y;
i++;
}
k = k+1;
tour[k] = tour[1];
for(var q=0;q<k+1;q++) {
console.log(tour[q]);
}
});
});
现在每当我运行我的程序时,都显示错误
TypeError: can't convert undefined to object
在
行var min = 9999999999999;
我的问题是,这是因为JavaScript无法处理大量数字或其他内容吗?
答案 0 :(得分:1)
Javascript的最大数量是1.7976931348623157e + 308(又名var Number.MAX_VALUE
),所以这不应该是个问题。
如果您尝试访问对象的对象,它将无法工作。
你有distance[X][j]
。这会尝试访问j
的密钥distance[X]
。要解决此问题,请将distance[X]
定义为对象:
distance[X] = [];
其他例子:
var distance = [];
distance[i]
//undefined;
distance[i][i]
//syntax error
distance[i] = [];
distance[i][i]
//undefined;
对于2D数组,请参阅this问题。
答案 1 :(得分:0)
尝试以最小数量
var min = int.MinValue
最大数量
var max = int.MaxValue
<强>被修改强>
请参阅Reference
Number.Max_Value
Number.Min_Value
<强>已更新强>
如果您看到自己的代码,则表示您填写了ind[]
0
for(j=0;j<friends_cnt;j++) {
ind[j] = 0;
}
并且在您的情况下,您已从i
设置1
的值。所以对于最后一个元素,它可能会抛出错误
答案 2 :(得分:0)
问题实际上在这里:
distance[i][i] = 9999999999999;
如果distance
为undefined
或为空数组,则该语句将失败。这应该解决它:
var distance = []; // <-- this is missing from the top of your code
// ...
if (!distance[i]) {
distance[i] = [];
}
distance[i][i] = 9999999999999;