Gå til innhold

[Løst] Klarer ikke se logikk i sorteringsløkke


Anbefalte innlegg

Hei.

 

I Java-læreboken min er det skrevet en metode som skal brukes til å sortere ordene i en tabell i riktig rekkefølge. Jeg klarer ikke helt å forstå logikken i koden, så jeg setter stor pris på om noen kan oppklare dette for meg. Tabellen har følgende ord:

 

String[] ord = { "så", "ikke", "vanskelig", "er", "dette" };

 

Selve metoden er som følger:

 

public static void sorterVedInnsetting(Comparable[] compTab) {

// For hvert gjennomløp:

for (int neste=1; neste<compTab.length; neste++) { // Ytre løkke

// Ta vare på neste-verdi som skal innsettes

Comparable verdi = compTab[neste];

// Forskyv alle verdier i sortert deltabell som er større enn

// neste-verdi ett hakk bakover i tabellen

int dette; // indeks for riktig plassering av verdi

for (dette=neste; dette > 0 && verdi.compareTo(compTab[dette-1])<0; dette--) { // Indre løkke

compTab[dette] = compTab[dette-1]; // flytt bakover!

}

compTab[dette] = verdi;

skrivTabell(neste+". gjennomløp: ", compTab);

}

}

 

Ved første utskrift vil vi da få:

 

1. gjennomløp: ikke så vanskelig er dette

 

 

Men jeg sliter litt med å se hva som skjer her. Dersom jeg går gjennom metoden trinn for trinn, får jeg følgende logikk for første gjennomgang av løkken:

 

- Metoden begynner ved å sette Comparable verdi = compTab[1], som er ordet "ikke".

 

- Metoden setter videre: int dette = neste = 1

 

- Den indre løkken vil så gjennomføres kun en gang. Ettersom ordet ved posision [1] i tabellen har lavere verdi enn ordet ved posisjon [0], vil vi da få:

compTab[1] = compTab[0]. Altså vil ordet som før stod på posisjon [1] nå erstattes med ordet som stod på posisjon [0]. Dette medfører at ordet "så" nå står på posisjon [1] i tabellen.

 

- Neste skritt i metoden er at: compTab[1] = verdi. Her er det jeg blir usikker. Vi har jo definert tidligere i metoden at verdi = "ikke". Altså skulle jeg da tro at compTab[1] nok en gang blir omgjort til ordet "ikke".

 

Slik jeg ser det skulle dermed utskriften bli akkurat som før:

 

1. gjennomløp: så ikke vanskelig er dette.

 

Men hvorfor skjer ikke dette? Hva er det som er galt med logikken min? Jeg setter veldig stor pris på om noen kan oppklare dette for meg!

Lenke til kommentar
Videoannonse
Annonse

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å
×
×
  • Opprett ny...