我正在尝试制作简单的JS代码,以找出给定字符串中出现的数字从1到9。我有这个Pascal代码可以工作:
Var n,i:longint;
A:array[0..9] of byte;
Begin
write('Введите число: ');readln(n);
While n>0 do
Begin
A[n mod 10]:=A[n mod 10]+1;
n:=n div 10;
End;
For i:=0 to 9 do
writeln('The number ',i,' occurs ',A[i],' amount of times');
readln;
End.
在JS中我最终得到了这个,但这似乎有一个永无止境的循环:
function plosh(form) {
var list = new Array(9);
var n = form.a.value;
while (n>0) {
a = n % 10;
list[a] = list[a]+1;
n = n % 10;
}
for (var i=0; i<=9; i++)
{
alert("Цифра"+i+"встречается"+A[i]+"раз");
}
}
会对我出错的地方提供任何帮助。提前谢谢!
答案 0 :(得分:2)
n = n % 10
一旦n
低于10
就会保持0
不变,因此它通常永远不会达到n = n % 10
,因此无限循环。
div operator in Pascal是一个整体划分。
更改
n = Math.floor( n / 10 );
到
1
您还有另一个问题:您未正确初始化阵列,因此您需要将undefined
添加到function plosh(form) {
var a,
list = [],
n = form.a.value;
while (n>0) {
a = n % 10;
list[a] = (list[a]||0)+1;
n = Math.floor( n / 10 );
}
for (var i=0; i<=9; i++) {
console.log("Цифра"+i+"встречается"+A[i]+"раз"); // <- less painful than alert
}
}
。解决这个问题:
{{1}}
答案 1 :(得分:1)
n:=n div 10;
翻译为:
n = n % 10;
但应该是:
n = Math.floor(n / 10);
编辑:此外,您在Pascal中定义一个数组[0..9],这意味着10个元素。当你致电Array(9)
时,你只会创建9个元素。