你可以在这本教科书练习中使用do-while而不是while(true)吗?

时间:2017-10-02 00:52:39

标签: javascript

课本练习:

写下函数sumInput():

  1. 使用提示向用户询问值并将值存储在数组中。
  2. 完成询问用户何时输入非数字值,空字符串或按“取消”。
  3. 计算并返回数组项的总和。
  4. P.S。零0是有效数字,请不要将输入停止为零。

    教科书解决方案:

    function sumInput() {
    
      let numbers = [];
    
      while (true) {
    
        let value = prompt("A number please?", 0);
    
        // should we cancel?
        if (value === "" || value === null || !isFinite(value)) break;
    
        numbers.push(+value);
      }
    
      let sum = 0;
      for (let number of numbers) {
        sum += number;
      }
      return sum;
    }
    

    我个人不喜欢while (true)因为它看起来不那么直观。尝试重写为do--while会不会错? (即使有一个特殊的问题导致do--while在这种情况下不起作用,我仍然想知道while (true)是否只是一些......非常接受的普遍用法与否)

    类似的东西:

    function sumInput() {
    
      let numbers = [];
    
      do {
        let value = prompt("A number please?", 0);
        numbers.push(+value);
      }
      while ( (value !== "" || value !== null) && isFinite(value) );
    
      let sum = 0;
      for (let number of numbers) {
        sum += number;
      }
      return sum;
    }
    

1 个答案:

答案 0 :(得分:0)

在这种情况下,你不能真正干净地使用do-while循环,因为“push”语句可能必须执行零次(例如,如果用户在输入任何数字之前退出)。但是,如果没有你想要避免的中断,循环体中的每个语句都将至少执行一次。在您的解决方案中,您最终每次都会将最终的无效值推送到数组上,这可能会破坏您的结果。

一般来说,我发现do-while循环很少有用,因为(就像这个例子一样)你经常需要在中间打破以避免一些最后的重复位(例如处理输入)。