Gå til innhold

if nesting - JavaScript


Anbefalte innlegg

Begynt med denne Codecademy-greia for å få litt programmeringskunnskaper...

Men står fast på et sikkert latterlig lett sted.

 

But look at that "15"...it says "Fizz" but it should be "FizzBuzz" because it's divisible by both 3 and 5. Oops!

 

Add another if statement to your code to check for this special case.

 

You are allowed to put if statements inside other if statements. This is called nesting.

 

// Add an else statement in case the number is divisible by 5. 

// for the numbers 1 through 20,
for (i=1; i<=20; i++) { 

 // if the number is divisible by 3, write "Fizz"
 if ( i % 3 === 0) 
 { console.log("Fizz")
   }



 // if the number is divisible by 5, write "Buzz"
else if (i % 5 === 0) { console.log("Buzz");

 }

 // otherwise, write just the number
 else {
   console.log(i);
 }
}

 

Jeg skal altså ha en kode som gjør at tall som kan deles på 3 og 5 vises som FizzBuzz i konsollen...

Mens de som bare deles på skal vises som Fizz, og de som deles på 5 som Buzz.

 

http://www.codecademy.com/courses/fizzbuzz/0#!/exercises/3

 

Hjelp? :)

Endret av Kakeshoma
Lenke til kommentar
Videoannonse
Annonse

Du kunne enkelt og greit bare droppet "else"-biten i koden, så ville det funket. I tillegg trenger du ikke { og } om du bare har én linje kode i en if / else. Dermed ser det slik ut:

 

// for the numbers 1 through 20,
for (i=1; i<=20; i++) { 
// if the number is divisible by 3, write "Fizz"
 if ( i % 3 === 0) 
  console.log("Fizz");

 // if the number is divisible by 5, write "Buzz"
 if (i % 5 === 0) console.log("Buzz");

 // otherwise, write just the number
 else
   console.log(i);
}

Lenke til kommentar

På den siste oppgaven står det:

 

FizzBuzz from 1 to 20 is cool, but you know what's cooler? FizzBuzz from 1 to 100.

 

Modify your FizzBuzz program so that it runs for 1 to 100.

 

If you want to be really cool, replace 100 with a variable that you declare and set at the beginning of your program so you can easily impress your friends with FizzBuzz solutions for any number of your choosing.

 

Skrev da dette i starten:

var i = 1 ;
var number = 100 ;
for (i; i<=number; i++)

 

Men den godtar ikke det...

Vet dere hva den er ute etter?

Lenke til kommentar

Det ser greit ut det du har gjort på slutten der, så jeg vet ikke hvorfor den ikke aksepterer det. Men det blir uansett ikke helt riktig med Araho sin løsning, da alle tall som IKKE er delelige på 5 kommer til å bli skrevet ut i uavhengig om de er delelige på 3 eller ikke. Tallet 3 kommer for eksempel da til å føre til at både Fizz og 3 blir skrevet ut, siden det er to helt separate if-setninger.

 

Først får du dette:

  1. Er tallet delelig på 3? Skriv "Fizz".

Så en ny runde med dette:

  1. Er tallet delelig på 5? Skriv "Buzz".
  2. Hvis ikke, skriv selve tallet.

 

Her er en funksjonell rett frem-løsning (som også lar deg bestemme hvor mange tall det er):

 

var max = 123; // eller hva du nå vil ha
var i = 1;
for (i; i <= max; ++i)
{
 if (i % 3 === 0 && i % 5 === 0)
 {
   console.log("FizzBuzz");
 }
 else if (i % 3 === 0)
 {
   console.log("Fizz");
 }
 else if (i % 5 === 0)
 {
   console.log("Buzz");
 }
 else
 {
   console.log(i);
 }
}

 

Det går fint an å effektivisere dette mer med færre ifs og ingen else, men dette er grunnleggende løsning som er enkel å forstå.

 

Gangen blir nå følgende:

  1. Er tallet delelig på både 3 og 5? Skriv "FizzBuzz".
  2. Hvis ikke, er det delelig på 3? Skriv "Fizz".
  3. Hvis ikke, er det delelig på 5? Skriv "Buzz".
  4. Hvis ikke, skriv selve tallet.

 

Vil også nevne at selv om du i teorien ikke trenger {} når det kun er én handling som utføres, anbefaler jeg å følge god kodeskikk og inkludere {} likevel. Det blir noen ekstra tegn og mellomrom av det, men du får kode som er lettere å lese, og du har mye bedre kontroll på hvor f.eks. én if slutter og en annen begynner.

Endret av Wedvich
  • Liker 1
Lenke til kommentar

Jeg synes det ble for mange kodelinjer... jeg foretrekker litt mer kompakt kode:

 

 var max = 123; // eller hva du nå vil ha
 var min = 1;
 for(var i=min; i<=max; i++)
   console.log(i%3==0? (i%5==0? "FizzBuzz" : "Fizz") : (i%5==0? "Buzz" : i));

 

:!:

Endret av jonny
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...