Gå til innhold

[Løst] Feil svar i tellevariabel i for-løkke


Anbefalte innlegg

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

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

Noen som ser hvorfor?

Lenke til kommentar
Videoannonse
Annonse

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 av cronbach alpha
Lenke til kommentar

 

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

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