2013-07-04 77 views
0

我正在編寫一個node.js腳本,它將前100個素數編寫到文件中,每個素數用逗號分隔。嘗試在Node.js中輸出素數時發生錯誤

#!/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))); 

當我試圖把它通過我得到這個錯誤:

[email protected]:~$ 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)); 

返回:

[email protected]:~$ 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

'fmt'函數沒有在任何地方定義。 –

+0

僅供參考:https://npmjs.org/package/fmt和http://nodetoolbox.com/packages/fmt – 3ventic

+0

謝謝,我認爲解決它,我將如何使素數輸出到文本文件?我認爲這會實現,但我什麼都沒有。 –

回答

1

改變兩行

console.log("listPrimes(" + k + ")"); 
console.log(fmt(listPrimes(k))); 

到單行

console.log("listPrimes(" + k + "): " + listPrimes(k).join(", ")); 

你不需要fmt反正這不是你將如何使用它...

編輯剛剛意識到listPrimes返回一個數組,而不是一個單一的值。因此,增加了join - 它允許我在數字之間放置「逗號,空格」,看起來比所有數字擠在一起更好。

至於你的「afterquestion」 - 不知道你做錯了什麼。下面是我的機器上會發生什麼(已複製文件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的命令時,輸出被定向到一個文件中。鑑於你得到的錯誤,你必須做一些不同的事情 - 我無法從你的評論中弄清楚它是什麼。也許你把>放在源文件中?

+0

謝謝,我認爲解決它,我將如何使它將素數導出到文本文件?我認爲這會實現,但我什麼都沒有。 –

+0

這導出「到控制檯」。根據您的操作系統,如果您在最後使用'>文件名'運行程序,它通常會將輸出發送到此文件。 – Floris

+0

我使用的是Ubuntu我添加了'>文件名'到最後,並得到這個錯誤。我必須先創建文件還是? '的ubuntu @ IP-172-31-47-235:〜$節點hw2.js /home/ubuntu/hw2.js:22 > hw2.text ^ 語法錯誤:意外的令牌> 在模塊。在Module.load(module.js:356:32)上的_compile(module.js:439:25) 位於Function.Module._load的Object.Module._extensions..js(module.js:474:10) (模塊.js:356:32) (module.js:312:12) at function.Module.runMain(module.js:497:10) at startup(node.js:119:16) at node.js:901:3' –

0

您嘗試撥打您還沒有定義的函數 '格式化'。

0

正如其他人所建議的,沒有功能fmt

因爲你是返回一個數組,你的最後一行,以及看起來像:

console.log(listPrimes(k).join(",")); 

是的,有對listPrimes(),因爲它總是返回的東西返回值不全面的檢查。

相關問題