0

私が解決しようとしている問題は次のとおりです。ユーザーが「終了」と入力するまで数字のペアを入力するように求めるプログラムを作成します。数値の各ペアが入力および検証されるたびに、関数を使用して数値を追加します。この関数は、数値のペアに対して 2 つのパラメーターを持ち、合計を返します。ユーザーが「quit」と入力した後、数値とその合計のすべてのペアを出力します。

1つだけ実行するとnumber1、number2、および合計を出力するプログラムがありますが、ユーザーが「終了」と入力するまで繰り返しようとすると、壊れているように見えますか?

//function to sum 2 entered numbers
function sum2enteredNumbers(number1, number2) 
{
    var sum1and2;
    sum1and2 = number1 + number2;
    return sum1and2;
}


function exercise4Part1() {
    // PART 1: YOUR CODE STARTS AFTER THIS LINE
    var QUIT_CODE = "quit";
    var output;
    var number1;
    var number2;

    while (number1 !== QUIT_CODE || number2 !== QUIT_CODE)
    {
    number1 = Number(prompt("Enter a number:"));
    number2 = Number(prompt("Enter another number:"));     
    }


    sum1and2 = sum2enteredNumbers(number1, number2);

    output = document.getElementById('outputPart1');

    output.innerHTML = "<br />Entry 1: " + number1 + " Entry 2: " + number2 + " Sum: " + sum1and2;

}

試行 2 -- まだ機能していません:

function sum2enteredNumbers(number1, number2) 
{
    var sum1and2;
    sum1and2 = number1 + number2;
    return sum1and2;
}


function exercise4Part1() {
    // PART 1: YOUR CODE STARTS AFTER THIS LINE
    var QUIT_CODE = "quit";
    var output;
    var number1;
    var number2;


    while (number1 !== QUIT_CODE && number2 !== QUIT_CODE)
    {
        number1 = prompt("Enter a number or \"quit\":");
        number2 = prompt("Enter another number or \"quit\":"); 
        if (number1 !== QUIT_CODE && number2 !== QUIT_CODE)
        {
         number1 = Number(number1);
         number2 = Number(number2);
        }
    }

    sum1and2 = sum2enteredNumbers(number1, number2);

    output = document.getElementById('outputPart1');

    output.innerHTML = "<br /> Entry 1: " + number1 + " Entry 2: " + number2 + " Sum: " + sum1and2;

}
4

1 に答える 1

0

概念的には、次のようにします。

  1. ユーザー入力を取得し、
    • 入力が「quit」の場合はいつでも停止します。(センチネルチェック)
  2. 加算演算を行い、
  3. 出力、
  4. 繰り返す。

ステップ 1 については、ほぼ完了です。この関数を考えてみましょう:

function getInput(msg) { 
    var value = prompt(msg); 
    if (value === QUIT_CODE) { 
         return false; 
    }
    return value; 
}

入力をまたはwhileに割り当てたまま、条件でこの関数を呼び出すことができます。number1number2

while ((number1 = getInput('Enter a number')) &&
       (number2 = getInput('Enter another number'))) { 
    // convert and output 
}

なぜこれが機能するのですか?

  • &&||つまり、JavaScript の論理ブール演算子はショート サーキットです。つまりfalse、最初のオペランドが に対して false の場合&&、条件はtrue2 番目のオペランドを評価せずに実行され、最初のオペランドが である場合、条件は 2 番目のオペランドを評価せずに実行されますtrue
  • ユーザーが 0 を入力した場合、while 条件が失敗し、機能しない原因となる JavaScript では通常0falsey と考えられます。ただし、この場合、入力のソースは文字列であり、式'0'は true です。
于 2015-04-19T07:03:10.643 に答える