用户输入数字对,直到他们进入“退出” - 哨兵不工作?

时间:2015-04-19 04:53:12

标签: javascript function loops sentinel

这是我试图解决的问题: 编写一个程序,要求用户输入数字对,直到他们输入"退出"。输入并验证每对数字后,使用函数添加数字。该函数将为这对数字提供两个参数,并将返回总和。用户输入"退出"后,输出所有数字对及其总和。

我已经让程序输出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;

}

1 个答案:

答案 0 :(得分:0)

从概念上讲,您希望这样做:

  1. 获取用户输入,
    • 如果在任何时候输入“退出”,则停止。 (哨兵检查)
  2. 执行添加操作,
  3. 输出,
  4. 重复。
  5. 对于第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的逻辑布尔运算符短路,这意味着如果{{1}的第一个操作数为false,则条件将为false而不评估第二个操作数如果第一个操作数是&&,则条件将为true而不评估第二个操作数。
    • 人们通常会认为true在JavaScript中是假的,这会导致while条件失败并且如果用户输入0则不起作用。但是在这种情况下,输入的来源是一个字符串,并且表达式0是真实的。