Gå til innhold

For-Løkker, forklar kort


Anbefalte innlegg

Kunne noe kort fortalt meg logikken i en for løkke, har ikke helt skjønt mer enn dette:

 

for(int i = 0; i < 17; ii++){

 

i=0, hvis i er mindre enn 17, så skal i øke med en, men fatter ikke helt hvordan dette brukes.

Endret av Tobias.
Lenke til kommentar
Videoannonse
Annonse
Kunne noe kort fortalt meg logikken i en for løkke, har ikke helt skjønt mer enn dette:

 

for(int i = 0; i < 17; ii++){

 

i=0, hvis i er mindre enn 17, så skal i øke med en, men fatter ikke helt hvordan dette brukes.

 

Løkken sier at for alle heltall i fra i er 0 til 16 så skal det som står inne i påfølgende { } utføres. Og man bruker gjerne verdien i inne i løkken til noe om man vil

Endret av kjartana
Lenke til kommentar

for(int i = 0; i < 17; ii++){
System.out.println(i);
}

 

Er mye det samme som:

 

int i = 0;
while (i < 17) {
System.out.println(i);
i++;
}

 

Men for-løkken har den fordelen at i forsvinner etter løkkekroppen.

 

i=0, hvis i er mindre enn 17, så skal i øke med en, men fatter ikke helt hvordan dette brukes.
Når skal dette brukes?

 

Når man har en liste / array og vil gjøre det samme med hvert element. La oss si du har en liste over ansatte i en bedrift og vil skrive ut alle sammen:

for (int i = 0; i < ansatte.length; i++) {
  System.out.println(ansatte[i]);
}

 

Eller hvis du bare vil skrive ut 8 mellomrom:

for (int i = 0; i < 8; i++) {
  System.out.print(" ");
}

Lenke til kommentar

Kan her også kanskje nevne "for-each"-varianten. Eksemplet nedenfor er lånt fra Sun (http://java.sun.com/j2se/1.5.0/docs/guide/...ge/foreach.html):

 

// Returns the sum of the elements of a
int sum(int[] a) {
int result = 0;
for (int i : a)
	result += i;
return result;
}

 

... som kunne sett slik ut med "vanlige" for-løkker:

int sum(int[] a) {
int result = 0;
for (int i = 0; i < a.length; i++)
	result += a[i];
return result;
}

 

 

"For-each"-varianten fungerer ikke til alle "for-løkkeoppgaver" - noen begrensninger er beskrevet på siden jeg linket til. Men den er ofte veldig kjekk å ha.

Lenke til kommentar
Kunne noe kort fortalt meg logikken i en for løkke, har ikke helt skjønt mer enn dette:

 

for(int i = 0; i < 17; ii++){

 

i=0, hvis i er mindre enn 17, så skal i øke med en, men fatter ikke helt hvordan dette brukes.

 

For-løkka benyttes hvis man har kode man skal utføre et bestemt antall ganger. I ditt eksempel vil for-løkka utføre eventuell kode innenfor krøllparentesene 17 ganger.

 

I sin enkleste form kan for-løkka brukes slik:

 

for (;;) {}

 

Setningen over er ikke særlig nyttig, da løkka aldri vil stoppe.

 

Inni for-løkkas parenteser kan vi plassere forskjellige typer uttrykk:

 

* Initialisering

* Terminering

* Inkrementering / dekrementering

 

Altså:

 

for (<initialisering>; <terminering>; <inkrementering / dekrementering>) {
<kode>
}

 

 

I eksempelet ditt er initialiseringsuttrykket ditt:

 

int i=0;

 

Termineringsuttrykket ditt er:

 

i < 17

 

Så har du et inkrementeringsuttrykk, nemlig:

 

i++

 

Initialiseringsuttrykket kjøres i det for-løkka starter. Da setter du 0 inn i variabelen i. Så er det slik at for-løkka kjører så lenge termineringsuttrykket ditt, i < 17, er sant (returnerer true). Når uttrykket ikke lenger er sant, så er for-løkka utført.

 

For hver løkke utføres inkrementeringsuttrykket. I ditt tilfelle er det i++, altså variabelen i økes med en for hver gang. Husk at termineringsuttrykket hele tiden "passer på" om løkka skal kjøre, ved å sjekke om i < 17.

 

Variabelen i er tilgjengelig innenfor for-løkkas parentes, men også innenfor krøllparentesene, det vil si i selve for-kroppen. Den kan du bruke, eller du kan la være. Eksempel:

 

for(int i = 0; i < 17; i++) {
 System.out.println("variabelen i har nå verdien " + i);
}

 

Dette gir følgende output:

 

variabelen i har nå verdien 0
variabelen i har nå verdien 1
variabelen i har nå verdien 2
variabelen i har nå verdien 3
variabelen i har nå verdien 4
variabelen i har nå verdien 5
variabelen i har nå verdien 6
variabelen i har nå verdien 7
variabelen i har nå verdien 8
variabelen i har nå verdien 9
variabelen i har nå verdien 10
variabelen i har nå verdien 11
variabelen i har nå verdien 12
variabelen i har nå verdien 13
variabelen i har nå verdien 14
variabelen i har nå verdien 15
variabelen i har nå verdien 16

 

Håper du ikke ble enda mer forvirret nå ;)

 

Hilsen Werner

Endret av wernie
Lenke til kommentar

Du har nok allerede forstått at FOR-løkker gjentar koden som man putter mellom { }. Men for å fortelle datamaskinen hvor mange ganger den skal kjøre igjennom løkka, så må vi lage et uttrykk som kan være sant eller usant. Så lenge uttrykket er sant, så vil datamaskinen starte på nytt i løkka når den har fullført en gjennomkjøring. Men for at vi skal kunne fortelle datamaskinen dette må vi oppgi tre argumenter, eller "regler", for FOR-løkka:

 

1. Hva utgangspunktet eller utgangsverdien skal være

2. Uttrykket som skal evalueres

3. Hva datamaskinen skal gjøre hver gang den har fullført en gjennomkjøring

 

Vi kan bryte argumentene i FOR-løkka di opp i biter:

 

FOR (int i = 0; i < 17; i++) { }

 

Utgangspunktet:

 

int i = 0

 

Vi deklarerer en heltallvariabel i som vi kan teste, et slags utgangspunkt. Variabelen i vil også holde tellinga på eksakt hvor mange ganger datamaskinen har gått igjennom FOR-løkka.

Denne variabelen kan også være et annet heltall enn 0 om vi ønsker å starte tellinga på f.eks 4 eller -5.

 

Uttrykket som skal evalueres:

 

i < 17

 

Så lenge variabelen er mindre enn 17, så vil datamaskinen gjenta koden i løkka. Denne reglen er absolutt, og vi må passe på at vi ikke lager uttrykk som aldri blir usant. Ellers får vi en uendelig løkke.

 

Hva som skal gjøres etter en gjennomkjøring:

 

i++

 

Dette betyr det samme som "i + 1". Altså vi legger til én til variabelen i for hver gang løkka er kjørt igjennom. Når i settes til 0 betyr dette at løkka kjøres igjennom 17 ganger. Etter den 17ende gangen vil ikke i lengre være mindre enn 17, og uttrykket er usant. Da stopper også gjennomkjøringa av løkka.

Endret av Skagen
Lenke til kommentar

Kan ingenting i Java, men det ser ut som at hver gang løkken starter på nytt pga. den er mindre en 17, vil den også settes til 0.

 

Altså, det jeg mener er at i koden din så har du skrevet en For løkke, men i den løkka så har du "int i = 0; neste; neste", hver gang den løkka kjører vil jo den kjøre int i = 0???

Lenke til kommentar

for (intiialisering; uttrykk; oppdatering)

initialiserings-setningen utføres bare én gang, før løkken starter. Løkken kjører så lenge uttrykket er sant og for hver iterasjon kjøres oppdaterings-setningen.

 

Altså vil den ikke kjøre int i=0 hver gang, bare første gang.

Lenke til kommentar
Dropp bøkene, get to programming! Finn deg noen kjekke oppgaver og spør her.

 

Ref. signatur :D har noen linker til oppgaver som har blitt gitt på Høyskoler, universiteter eller lettere oppgaver? :)

Tja, de største universitetene i Norge har ofte massevis ute, for UiB er det INF100 som er mest aktuelt for deg.

 

Men i tillegg kan du også få massevis av oppgaver andre steder, for eksempel på Project Euler, UVa Online Judge og Sphere Online Judge.

 

Der er det flere oppgaver enn det er mulig å løse iløpet av et helt liv. Det eneste det står på er motivasjonen. Hvis du er glad i matematikk, anbefaler jeg deg Project Euler, ellers vil det kanskje være fornuftig å begynne på Sphere.

 

Opprett en ny tråd dersom du setter deg fast.

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