0

各素数をコンマで区切って、最初の 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)));

それを通過させようとすると、次のエラーが発生します。

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
4

3 に答える 3

1

2 行を変更する

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、出力がファイルに送られます。あなたが得ているエラーを考えると、あなたは何か違うことをしているに違いありません-あなたのコメントからそれが何であるかわかりません。>おそらくソースファイルに入れましたか?

于 2013-07-04T16:03:06.983 に答える
0

定義していない関数「fmt」を呼び出そうとしています。

于 2013-07-04T15:58:39.650 に答える
0

他の人が示唆しているように、関数はありませんfmt

配列を返すため、最後の行は次のようになります。

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

listPrimes()はい、常に何かを返すため、戻り値の健全性チェックはありません。

于 2013-07-04T16:03:47.010 に答える