basillen Skrevet 25. september 2011 Del Skrevet 25. september 2011 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
Hårek Skrevet 25. september 2011 Del Skrevet 25. september 2011 Du har ikke tatt med at 'dette' teller nedover. Indre løkke er ferdig når 'dette' er 0. Altså blir "ikke" satt inn på posisjon 0. Lenke til kommentar
basillen Skrevet 25. september 2011 Forfatter Del Skrevet 25. september 2011 Ah! Selvsagt. Tusen takk skal du ha Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå