如何将这个Pascal代码转换为JavaScript?

时间:2014-04-22 12:29:02

标签: 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 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]+"раз");
    }
}

会对我出错的地方提供任何帮助。提前谢谢!

2 个答案:

答案 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个元素。