Gå til innhold

if nesting - JavaScript


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet (endret)

Takk for svar :) Men jeg ble ikke så mye klokere... Annet enn jeg ikke kan bruke else if...?

Else if ga vel ingen mening i koden når jeg tenker meg om.

Endret av Kakeshoma
Skrevet (endret)

Erstatt

if ( i % 3 === 0) 
 { console.log("Fizz")
   }

med

if (i % 3 === 0) {
 if (i % 5 === 0) console.log("FizzBuzz");
 else console.log("Fizz");
}

Endret av jonny
Skrevet

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

Skrevet

Erstatt

 

if ( i % 3 === 0) 
 { console.log("Fizz")
   }

med

if (i % 3 === 0) {
 if (i % 5 === 0) console.log("FizzBuzz");
 else console.log("Fizz");
}

 

 

 

Takk, funket.

Skrevet

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?

Skrevet (endret)

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
Skrevet (endret)

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

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...