3

私はプログラミングが初めてで、if-elseロジックをプログラムして配列などを作成しようとしました..

ポイント変数を使用して、変数が含まれるポイント間隔を決定し、その間隔のファンファクトを含む配列を作成し、この配列からランダムなファンファクトを返します。

たとえば、1000、2500 などのマイルストーンがあります。userScorePoints が 2500 を超える場合、userScorePoints が次のマイルストーンに到達するまで、その数値に関する funfact を含む配列からランダムな funfact を返すメソッドが必要です。これは 5000 です。

私が書いたコードの問題は、最初の if からランダムな funfact しか返さないことです。そのため、ポイントが 2603 を超えているため、2500 番から funfacts を取得する必要があるにもかかわらず、1000 番からのみ funfacts を取得します。 .

誰かがこれで私を助けてくれませんか..?

これが私のコードです:

function getFunfact(userScorePoints) {
    var array = new Array();

    if (1000 <= userScorePoints < 2500) {
        var funfact1000 = new Array();
        funfact1000[0] = "funfacts about the number 1000";
        funfact1000[1] = "...";
        funfact1000[2] = "...";
        funfact1000[3] = "...";
        funfact1000[4] = "...";
        funfact1000[5] = "...";
        array = funfact1000;
    } else if (2500 <= userScorePoints < 5000) {
        var funfact2500 = new Array();
        funfact2500[0] = "funfacts about the number 2500";
        funfact2500[1] = "...";
        funfact2500[2] = "...";
        funfact2500[3] = "...";
        funfact2500[4] = "...";
        funfact2500[5] = "...";
        array = funfact2500;
    } else if (5000 <= userScorePoints < 10000) {
        var funfact5000 = new Array();
        funfact5000[0] = "funfacts about the number 5000";
        funfact5000[1] = "...";
        funfact5000[2] = "...";
        funfact5000[3] = "...";
        funfact5000[4] = "..."
        funfact5000[5] = "...";
        array = funfact5000;
    } else if (10000 <= userScorePoints < 20000) {
        var funfact10000 = new Array();
        funfact10000[0] = "funfacts about the number 10.000";
        funfact10000[1] = "...";
        funfact10000[2] = "...";
        funfact10000[3] = "...";
        funfact10000[4] = "...";
        funfact10000[5] = "...";
        array = funfact10000;
    } else if (20000 <= userScorePoints < 30000) {
        var funfact20000 = new Array();
        funfact20000[0] = "funfacts about the number 20.000";
        funfact20000[1] = "...";
        funfact20000[2] = "...";
        funfact20000[3] = "...";
        funfact20000[4] = "...";
        funfact20000[5] = "...";
        array = funfact20000;
    } else if (30000 <= userScorePoints < 50000) {
        //etc.
    } else {}
    return array[getRandom(6)]; //this method returns a random element, this one works.
4

6 に答える 6

5

そのようなリレーショナル比較を連鎖させることはできません。あなたは書く必要があります:

if (1000 <= userScorePoints && userScorePoints < 2500) {
    ...
}

あなたが書いたものは、あなたが書いたかのように解析されました:

if ((1000 <= userScorePoints) < 2500) {
    ...
}

括弧内の比較は 0 または 1 に評価され、常に 2500 未満です。

于 2013-08-30T08:32:46.537 に答える
4

あなたが実際に欲しいものに対して構文が間違っています-

これは正しい構文です -

if(5000 <= userScorePoints &&  userScorePoints < 10000)

複数の論理比較には「&&」を使用します。

また、コードを書くときにインタープリターが何を理解するのかについても説明します-

if(5000 <= userScorePoints < 10000)

基本的には一次比較を行い5000 <= userScorePointsます。結果は、数値に変換された場合、trueまたはfalseと同等の1またはになります。0

したがって、次のステップ0 < 10000では、前の比較の結果が false である 1 < 10000、結果が true であるかを比較します。どちらの場合も、値が 10000 未満であるため、条件は常に true です。

これで疑問が解消されることを願っています。ハッピーコーディング!

于 2013-08-30T08:32:38.880 に答える
3

プログラミングは数学ではありません。条件は次の形式である必要があります。

if (1000 <= userScorePoints && userScorePoints  < 2500)
于 2013-08-30T08:32:52.907 に答える
2

Javascript は、そのような比較を連鎖しません。 *より大きい場合if (a < b < c)は常に true になります。c1

解決策は、それらを置き換えることですif (a<b && b < c)

  • a<b<c(a<b)<cJavascript 演算子の優先順位規則により、と同等です。or which を数値と比較すると、 or に型キャストされて返さa<bれます。結論として、すべての比較は実際には or と比較されます。truefalse10c01
于 2013-08-30T08:33:03.680 に答える
1

次のようなものを使用する必要があります。

if (1000 <= userScorePoints && userScorePoints < 2500)
if (2500 <= userScorePoints && userScorePoints < 5000)
etc...

使用した構文では、Javascript が次のように解析するため、必要な結果が得られません。

if((1000 <= userScorePoints)/*either true(1) or false(0)*/ < 2500)/* Always true,
                                                                     since both 0 and
                                                                     1 are < 2500 */
于 2013-08-30T08:33:18.663 に答える
0

Tusharは正しいです。使用する:

function getFunfact(userScorePoints) {
    var array = new Array();

    if ((1000 <= userScorePoints) && (userScorePoints < 2500)) {
        var funfact1000 = new Array();
        funfact1000[0] = "funfacts about the number 1000";
        funfact1000[1] = "...";
        funfact1000[2] = "...";
        funfact1000[3] = "...";
        funfact1000[4] = "...";
        funfact1000[5] = "...";
        array = funfact1000;
    } else if ((2500 <= userScorePoints) && (userScorePoints < 5000)) {
        var funfact2500 = new Array();
        funfact2500[0] = "funfacts about the number 2500";
        funfact2500[1] = "...";
        funfact2500[2] = "...";
        funfact2500[3] = "...";
        funfact2500[4] = "...";
        funfact2500[5] = "...";
        array = funfact2500;
    } else if ((5000 <= userScorePoints) && (userScorePoints < 10000)) {
        var funfact5000 = new Array();
        funfact5000[0] = "funfacts about the number 5000";
        funfact5000[1] = "...";
        funfact5000[2] = "...";
        funfact5000[3] = "...";
        funfact5000[4] = "..."
        funfact5000[5] = "...";
        array = funfact5000;
    } else if ((10000 <= userScorePoints) && (userScorePoints < 20000)) {
        var funfact10000 = new Array();
        funfact10000[0] = "funfacts about the number 10.000";
        funfact10000[1] = "...";
        funfact10000[2] = "...";
        funfact10000[3] = "...";
        funfact10000[4] = "...";
        funfact10000[5] = "...";
        array = funfact10000;
    } else if ((20000 <= userScorePoints) && (userScorePoints < 30000)) {
        var funfact20000 = new Array();
        funfact20000[0] = "funfacts about the number 20.000";
        funfact20000[1] = "...";
        funfact20000[2] = "...";
        funfact20000[3] = "...";
        funfact20000[4] = "...";
        funfact20000[5] = "...";
        array = funfact20000;
    } else if ((30000 <= userScorePoints) && (userScorePoints < 50000)) {
        //etc.
    } else {}
    return array[getRandom(6)];
}
于 2013-08-30T08:39:23.183 に答える