7 svar
175 visningar
civilingengör behöver inte mer hjälp
civilingengör 193
Postad: 16 maj 2022 18:21

Lista - Sortering av siffror i minskande ordning

Hej! Varför fungerar inte denna metod? Persons är en redan existerande lista. Bilden visar även nedan hur utskriften förväntas bli respektive hur den faktist blir. Jag skall alltså skapa en lista med personer sorterade efter deras nummer.

CurtJ 1203
Postad: 16 maj 2022 19:02

Ett bra tips är att ställa upp en tabell med de olika i och j värdena och se vad pos och list[i] blir när du loopar igenom dina for-loopar. Jag förstår att du håller på att lära dig att konstruera en algoritm men ska du göra något professionellt så finns det färdiga metoder för sånt här. T ex Arrays.sort() eller TreeSet(Comparator<? super E> comparator).

civilingengör 193
Postad: 16 maj 2022 20:21 Redigerad: 16 maj 2022 20:32

Tack för tipset! Arrays.sort är säkerligen effektivare men jag måste lära mig algoritmen. Jag har nu ändrat en aning i algoritmen:

CurtJ 1203
Postad: 16 maj 2022 20:42

Du går igenom listan och för varje element så gör du något med alla följande element och för varje sånt stoppar du in det största på samma plats i l istan. Säg att du har en lista på 3 element.

Du börjar med i = 0

    j = 1

        om telenr [0] > telenr [1]

            list[0] = telnr[0]

        annars

            list[0] = telnr[1]

    j=2

        om telenr[0] > telenr[2]

            list[0] = telnr[0]

        annars

             list[0] = telnr[2]

i = 1

    j = 2

        om telenr[1] > telenr[2]

            list[1] = telenr[1]

        annars

             list[1] = telenr[2]

i=2

            inget händer.

 

 Jag tror din algoritm blir svår att få till då i varje instoppning jämför ditt j-element mot i-elementet och inte mot det element som du redan stoppat in i listan (list[i] i st för persons.get(i)) och när du gått igenom alla elementen har du ingen garanti att listan till fullo är sorterad även om du jämför med  det aktuella elementet i listan. 

Det finns många algoritmer för att sortera en lista. En av de enklare är bubblesort som du säkert hittar på nätet. Den rullar igenom listan och flyttar två element i taget så att det större (eller mindre om sorteringen är åt andra hållet) blir det första av de två. Så håller man på tills man loopat igenom listan och inga element har flyttats. Då är man klar. Det finns varianter på det men enkelt uttryckt. Titta på den som inspiration. Kanske hittar du på något bättre.

civilingengör 193
Postad: 16 maj 2022 20:45 Redigerad: 16 maj 2022 20:51

Absolut, det ska jag kolla upp! Tack så mycket för din tid och hjälp! Om man kollar på listan som önskas returneras så kommer "333" före "1234". Jag antar att det då är avsett att man skall gå igenom siffra för siffra och jämföra första siffran av varje tal osv? Detta då compareTo istället ger att "1234" är större än "333". Jag funderade på att konvertera talen till String för att kunna jämföra index för index men det blir kanske också svårare än vad det borde.

CurtJ 1203
Postad: 16 maj 2022 21:01 Redigerad: 16 maj 2022 21:20

CompareTo fungerar på strängar om det är det du uttryckt telefonnumret i så du behöver inte titta på varje tecken för sig. "33" är mindre än "34" om du använder compareTo.  Notera dock att du i ett skarpt läge måste verifiera att alla telefonnummer är formatterade på samma sätt eftersom alla tecken i strängen räknas.

Vill du jämföra olika långa telefonnummer så gör om dem till int's innan jämförelsen alt gör strängarna lika långa genom att padda med inledande blanktecken

civilingengör 193
Postad: 17 maj 2022 08:05

Jag tror jag fått rätt på det hela nu. Igen, tusen tack för din tid.

CurtJ 1203
Postad: 17 maj 2022 09:11

Bra jobbat!

Svara
Close