Not Impressed Skrevet 5. september 2015 Del Skrevet 5. september 2015 Har en metode som går igjennom, sorterer og skriver ut maksverdi for en array. Jeg skal deretter lage en metode som teller opp antall ombyttinger som foretas i den tabellen når den sorteres. Jeg har prøvd meg på en for- i for-løkke, men antallvariabelen blir feil. public static int ombyttinger(int[] a) //teller antall ombyttinger i en tabell { int antall = 0; //setter antall lik 0 for (int i = a.length - 1; i > 0; i--) //løper igjennom tabellen og sorterer lavt til høyest { for (int j = 0; j < i; j++) { if (a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; antall++; //teller antall ombyttinger } } } return antall; //returnerer antall ombyttinger i tabell a int[] a = {5, 3, 7, 4, 3, 5, 7, 8, 6, 7}; blir sortert riktig, høyeste verdi skrives ut (8), men på antall så får jeg 0. Tydeligvis så telles ikke ombyttene selv om den sorteres. Noen som ser hvorfor? Lenke til kommentar
Persn Skrevet 5. september 2015 Del Skrevet 5. september 2015 Når jeg bruker metoden din så skriver den ut 11, ikke 0. Kan du poste hvordan du bruker metoden også? Lenke til kommentar
cronbach alpha Skrevet 5. september 2015 Del Skrevet 5. september 2015 (endret) Ja testet koden jeg også, og den skriver ut 11. Legger ved en copy/paste kode som benytter koden du hadde med metodekall: public class Test1 { public void ombyttinger(int[] a){ int antall = 0; for (int i = a.length - 1; i > 0; i--){ for (int j = 0; j < i; j++) { if (a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; antall++; } } } System.out.println("Etter sortert: "); for(int i = 0; i < a.length; i++){ System.out.println(a[i] + ","); } System.out.println("og ble byttet: " + antall + " ganger før den ble sortert."); } public static void main(String[] args) { Test1 t = new Test1(); int[] a = {5, 3, 7, 4, 3, 5, 7, 8, 6, 7, 22, 10, 10, 12, 99, 20}; System.out.println("Array før sortert: "); for(int i = 0; i < a.length; i++){ System.out.println(a[i] + ","); } t.ombyttinger(a); } } Denne printer ut: run: Array før sortert: 5, 3, 7, 4, 3, 5, 7, 8, 6, 7, 22, 10, 10, 12, 99, 20, Etter sortert: 3, 3, 4, 5, 5, 6, 7, 7, 7, 8, 10, 10, 12, 20, 22, 99, og ble byttet: 16 ganger før den ble sortert. Endret 5. september 2015 av cronbach alpha Lenke til kommentar
Not Impressed Skrevet 6. september 2015 Forfatter Del Skrevet 6. september 2015 Ja testet koden jeg også, og den skriver ut 11. Legger ved en copy/paste kode som benytter koden du hadde med metodekall: public class Test1 { public void ombyttinger(int[] a){ int antall = 0; for (int i = a.length - 1; i > 0; i--){ for (int j = 0; j < i; j++) { if (a[j] > a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; antall++; } } } System.out.println("Etter sortert: "); for(int i = 0; i < a.length; i++){ System.out.println(a[i] + ","); } System.out.println("og ble byttet: " + antall + " ganger før den ble sortert."); } public static void main(String[] args) { Test1 t = new Test1(); int[] a = {5, 3, 7, 4, 3, 5, 7, 8, 6, 7, 22, 10, 10, 12, 99, 20}; System.out.println("Array før sortert: "); for(int i = 0; i < a.length; i++){ System.out.println(a[i] + ","); } t.ombyttinger(a); } } Denne printer ut: run: Array før sortert: 5, 3, 7, 4, 3, 5, 7, 8, 6, 7, 22, 10, 10, 12, 99, 20, Etter sortert: 3, 3, 4, 5, 5, 6, 7, 7, 7, 8, 10, 10, 12, 20, 22, 99, og ble byttet: 16 ganger før den ble sortert. Ser at når jeg har testet programmet så har det blitt kjørt en metode før "ombyttinger()" som har gjort at den allerede var sortert når "ombyttinger" skulle gjøre det samme. Når jeg derimot kjører kun "ombyttinger" så får jeg utifra denne tabellen: "int[] a = {5, 9, 6, 10, 2, 7, 3, 8, 4, 1};", 29 ombyttinger. Jeg har funnet ut at jeg har telt antall inversjoner og ikke antall ombyttinger. Ved å kjøre: public static int ombyttinger(int[] a) //teller antall ombyttinger i en tabell { int antall = 0; // antall ombyttinger i tabellen for (int i = 1; i < a.length; i++) // går fra 1 til lengden til tabellen { if (a[i - 1] > a[i]) // sammenligner to naboverdier { int temp = a[i-1]; // bytter plass mellom verdiene a[i-1] = a[i]; a[i] = temp; antall++; // teller opp } } return antall; // returnerer } //Utskrift fra int[] a = {5, 9, 6, 10, 2, 7, 3, 8, 4, 1}; gir 7 som er riktig svar. får jeg riktig svar. Lettere å finne ut svaret når man lufter med andre! 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å