【问题标题】:Function that uses if/else statement使用 if/else 语句的函数
【发布时间】:2015-04-15 10:36:03
【问题描述】:

我创建了一个函数,可以打印 1-24 之间的所有数字。如果数字可被 3 整除,则打印 Fizz,如果可被 5 整除,则打印 Buzz。

如果开始 > 停止,我想添加一条错误消息。我怎样才能做到这一点?我尝试了警报,但根本没有成功。

2) 当我使用 start=2 和 stop=24 打印函数时,显示的第一个值是“未定义”。这是为什么?

通过使用 .substr(1) 我想删除左边的第一个逗号。

function fizzBuzz(start, stop) {
  if (start >= stop)
 var returnString;
 for(var i= start; i <= stop; i++) {
    returnString += ",";
    if (i % 3 === 0 && i % 5 === 0)
      returnString += "FizzBuzz";
    else if (i % 3 === 0)
        returnString += "Fizz";
   else if (i % 5 === 0)
        returnString += "Buzz";
    else
        returnString += i;
}
 return returnString;
}
var result = fizzBuzz(2, 24).substr(1);

提前致谢!

【问题讨论】:

  • if (start &gt;= stop) 表示 start 必须是 > 或 = 才能停止,而您是说 start = 2stop = 24,所以 start
  • 您可以通过将returnString初始化为空字符串,然后使用if (returnString.length&gt;0) returnString += ",";来避免使用前导逗号
  • 有几种方法可以避免前导逗号。除非在该函数的其他用途中需要前导逗号,否则最糟糕的方法是修改函数的结果。在函数中执行。

标签: javascript string function if-statement


【解决方案1】:

如果您想在start &gt;= stop 时显示错误消息,可以使用alert 来完成。你第一次得到未定义,因为returnString 变量没有在任何地方声明。

所以尝试这样的事情。它会解决你的问题

function fizzBuzz(start, stop) {
    var returnString = '';
    if (start >= stop) {
        alert('stop must be greater than start');
        return;
    }
    for (var i = start; i <= stop; i++) {
        returnString += ",";
        if (i % 3 === 0 && i % 5 === 0) 
            returnString += "FizzBuzz";
        else if (i % 3 === 0) 
            returnString += "Fizz";
        else if (i % 5 === 0) 
            returnString += "Buzz";
        else returnString += i;
    }
    return returnString;
}

JS Fiddle Demo

【讨论】:

    【解决方案2】:

    你可以这样做。

    function fizzBuzz(start, stop) {
      if (start >= stop){
         throw "start must be less than stop";
      }
     var returnString = "";
      ...
      ...
      ...
     return returnString;
    }
    var result = fizzBuzz(2, 24).substr(1);
    

    【讨论】:

      【解决方案3】:

      你需要把验证放在 if 子句中

      if (start >= stop)
      {
         return "start must be less than stop";
      }
      

      你需要先用空字符串初始化returnString

      var returnString = "";
      

      【讨论】:

        【解决方案4】:

        显示的第一个值是未定义的,因为这是您声明它的方式:

        if (start >= stop)
         var returnString;
        

        请注意,您没有左括号,因此您基本上只需声明该变量。即使你不声明它,它仍然会在你以后做时未定义:

        returnString += ",";

        因为它总是以undefined 开头。

        您可以将该行移到末尾,也可以在第一个if 检查并在start &gt; stop 时返回:

        function fizzBuzz(start, stop) {
            if (start >= stop) {
                alert('This is wrong');
                return;
            }
        
        
          returnString = "";
          for(var i= start; i <= stop; i++) {
            if (i % 3 === 0 && i % 5 === 0)
              returnString += "FizzBuzz";
            else if (i % 3 === 0)
                returnString += "Fizz";
           else if (i % 5 === 0)
                returnString += "Buzz";
            else
                returnString += i;
        
            returnString += ",";
        }
        
         return returnString;
        }
        var res = fizzBuzz(2, 24);
        var result = res.substring(0, res.length - 1);;
        console.log(result);
        

        Fiddle

        【讨论】:

          【解决方案5】:

          对于错误消息,请使用throw

          function fizzBuzz(start, stop) {
            if (start >= stop){
               throw "start must be less than stop";
            }
            ....
          

          如果你想向用户显示信息,这需要你捕获错误

          try{
              var result = fizzBuzz(72, 24).substr(1);
              alert(result);
          }catch(e){
              alert(e); // alerts "start must be less than stop"
          }
          

          第二个问题是因为resultStringundefined 开头,当您将字符串连接到未定义时,您会得到字符串“UndefinedYOURSTRINGHERE”。将returnString 定义为空字符串。

           var returnString = "";
          

          【讨论】:

            【解决方案6】:

            您可以对错误使用 throw 语句:

            if (start >= stop){
                throw "first integer must be less than 2nd integer"
            }
            

            您还必须使用初始值声明 returnString:

             var returnString = "";
            

            【讨论】:

              【解决方案7】:

              问题来了,

              if (start >= stop) 
              var returnString;
              

              这里不需要 if 语句,但如果你需要你也可以这样做,

                function fizzBuzz(start, stop) { if (start >= stop){
                   var returnString;
               for(var i= start; i <= stop; i++) { returnString += ","; 
              if (i % 3 === 0 && i % 5 === 0) returnString += "FizzBuzz"; 
              else if (i % 3 === 0) returnString += "Fizz"; else if (i % 5 === 0) returnString += "Buzz";
               else returnString += i; }
               return returnString;
               }
                  }
                   var result = fizzBuzz(2, 24).substr(1);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-11-14
                • 2021-11-14
                • 1970-01-01
                • 2019-02-28
                • 2019-04-09
                • 2022-07-28
                • 1970-01-01
                相关资源
                最近更新 更多