我正在编写一个node.js脚本,它将前100个素数写入文件,每个素数用逗号分隔。
#!/usr/bin/env node
function listPrimes( max ) {
var primes = [];
var sieve = new Array( max );
for( var i = 0; i < max; i++ ) {
sieve[i] = true;
}
for( var p = 2; p < max; p++ ) {
if( sieve[p] ) {
// p is prime, save it and mark p*2, p*3, etc. as non-prime
primes.push( p );
for( var t = p * 2; t < max; t += p ) {
sieve[t] = false;
}
}
}
return primes;
}
var k = 20;
console.log("listPrimes(" + k + ")");
console.log(fmt(listPrimes(k)));
当我尝试通过时,我收到此错误:
ubuntu@ip-172-31-47-235:~$ node hw2.js
listPrimes(20)
/home/ubuntu/hw2.js:22
console.log(fmt(listPrimes(k)));
^
ReferenceError: fmt is not defined
at Object.<anonymous> (/home/ubuntu/hw2.js:22:13)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
我不知道出了什么问题,我是初学者,所以可能非常明显。
编辑:已修复
#!/usr/bin/env node
function listPrimes( max ) {
var primes = [];
var sieve = new Array( max );
for( var i = 0; i < max; i++ ) {
sieve[i] = true;
}
for( var p = 2; p < max; p++ ) {
if( sieve[p] ) {
// p is prime, save it and mark p*2, p*3, etc. as non-prime
primes.push( p );
for( var t = p * 2; t < max; t += p ) {
sieve[t] = false;
}
}
}
return primes;
}
var k = 100;
console.log("listPrimes(" + k + "):" + listPrimes(k));
退货:
ubuntu@ip-172-31-47-235:~$ node hw2.js
listPrimes(100):2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
答案 0 :(得分:1)
更改两行
console.log("listPrimes(" + k + ")");
console.log(fmt(listPrimes(k)));
到单行
console.log("listPrimes(" + k + "): " + listPrimes(k).join(", "));
你不需要fmt
,无论如何你不会使用它......
已编辑刚刚意识到listPrimes
返回一个数组,而不是单个值。因此添加了join
- 它允许我在数字之间添加“逗号,空格”,这些数字看起来比挤在一起的所有数字都要好一些。
至于你的“问题” - 不确定你做错了什么。以下是我的机器上发生的事情(将文件hw2.js
复制到本地目录):
bigMac:node floris$ node hw2.js
listPrimes(100): 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
bigMac:node floris$ node hw2.js > output.txt
bigMac:node floris$ cat output.txt
listPrimes(100): 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
bigMac:node floris$ dir
total 16
drwxr-xr-x 4 floris floris 136 Jul 4 16:17 .
drwxr-xr-x 140 floris floris 4760 Jul 4 16:13 ..
-rw-r--r-- 1 floris floris 561 Jul 4 16:15 hw2.js
-rw-r--r-- 1 floris floris 112 Jul 4 16:17 output.txt
bigMac:node floris$
如您所见,当我使用> output.txt
运行命令时,输出将定向到文件。鉴于你得到的错误,你必须做一些不同的事情 - 我无法从你的评论中弄清楚它是什么。您是否将>
放在源文件中?
答案 1 :(得分:0)
您正在尝试调用尚未定义的函数'fmt'。
答案 2 :(得分:0)
正如其他人所建议的那样,没有函数fmt
。
由于你要返回一个数组,你的最后一行也可能是这样的:
console.log(listPrimes(k).join(","));
是的,listPrimes()
的返回值没有进行健全性检查,因为它总是返回一些内容。