如何将此Pascal代码转换为JavaScript?
我试图编写简单的JS代码,以找出给定字符串中1到9之间的数字的数量。我有一个Pascal代码:如何将此Pascal代码转换为JavaScript?,javascript,pascal,Javascript,Pascal,我试图编写简单的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 numbe
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中,我以这个结尾,但这似乎有一个永无止境的循环:
函数plosh(表单){
变量列表=新数组(9);
var n=形式a.值;
而(n>0){
a=n%10;
列表[a]=列表[a]+1;
n=n%10;
}
对于(var i=0;i
翻译为:
n = n % 10;
但应该是:
n = Math.floor(n / 10);
编辑:同样,你用帕斯卡定义了一个数组[0..9],这意味着10个元素。当你调用array(9)
时,你只创建了9个元素。n=n%10
一低于10
就保持n
不变,所以它通常永远不会达到0
,因此循环是无限的
这个函数进行整数除法
改变
n = n % 10
到
您还存在另一个问题:您没有正确初始化数组,因此正在将1
添加到undefined
。请按如下方式修复此问题:
函数plosh(表单){
var a,
列表=[],
n=形式a.值;
而(n>0){
a=n%10;
列表[a]=(列表[a]| 0)+1;
n=数学楼层(n/10);
}
对于(var i=0;i更正将是n=Math.floor(n/10)
。在a=n%10;
之前,请小心添加var
,否则a
将是一个全局变量。这可能会在将来导致一些问题。别忘了用值初始化数组(可能是0)!明白了,我现在知道哪里出错了!非常感谢。
n = n % 10
n = Math.floor( n / 10 );