İf/else deyimini kullanan işlev

1-24 arası tüm sayıları basacak bir fonksiyon yarattım. Sayı 3'e bölünebilirse Fizz, 5'e bölünürse Buzz yazdırır.

If start > stop, I want to add an error message. How can I do that? I tried with alert but that did not work out at all.

2) Fonksiyonu start = 2 ve stop = 24 ile yazdırdığımda gösterilen ilk değer "tanımsız" dır. Neden?

.Substr (1) kullanarak sola ilk virgül kaldırmak istiyorum.

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);

Şimdiden teşekkürler!

0
Lider virgülden kaçınmanın birkaç yolu vardır. Bu işlevin diğer kullanımlarında, baş virgül gerekir, bunu yapmanın en kötü yolu, işlevin sonucunu değiştirmektir. İşlevinde yapın.
katma yazar Bill Woodger, kaynak
Boş bir dizeye returnString 'ı başlatarak, sonra if (returnString.length> 0) returnString + = ","; kullanarak baştaki virgülden kaçınabilirsiniz.
katma yazar Steve Francisco, kaynak
if (start> = stop) , start'ın> veya = durdurmak için olması gerektiği anlamına gelir ve start = 2 ve stop = 24 , öyleyse başla
katma yazar Edwin Dayot, kaynak

7 cevap

You want to show error message if start >= stop, it can be done using alert. You are getting undefined for the first time because returnString variable didn't declare anywhere.

Öyleyse böyle bir şey dene. Bu senin problemini çözerdi

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
katma

Fıkra halinde doğrulama koymanız gerekir.

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

Ve önce returnString 'i boş dizeyle başlatmanız gerekir.

var returnString = "";
2
katma

Bunu yapabilirsiniz .

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);
2
katma

For the error mressage use throw

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

Bu, kullanıcıya bilgi görüntülemek istiyorsanız hatayı yakalamanızı gerektirir.

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

İkinci soru şudur: resultString , hayatı undefined olarak başlatır ve undefined için bir dize birleştirdiğinizde "UndefinedYOURSTRINGHERE" dizesini alırsınız. returnString öğesini boş bir dize olarak tanımlayın.

 var returnString = "";
1
katma

Sorun burada,

if (start >= stop) 
var returnString;

Burada if ifadesine gerek yok ama yine de ihtiyacınız varsa, bunu yapabilirsiniz,

  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);
1
katma

İlk değer görünmüyor çünkü tanımlanmadı:

if (start >= stop)
 var returnString;

Açma dirseğinin olmadığına dikkat edin, bu nedenle temelde bu değişkeni bildirirsiniz. Bunu beyan etmeseniz bile, daha sonra ne zaman tanımlanmayacağına karar vermeyecektir:

returnString + = ",";

Her zaman undefined olarak başladığından beri.

You can move that line to the end, and also you can add an alert at the first if check and return if start > 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

1
katma

Hata için throw deyimini kullanabilirsiniz:

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

Ayrıca returnString'i bir başlangıç ​​değeriyle beyan etmelisiniz:

 var returnString = "";
0
katma