Sortera en array i java avtagande, minskande?

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Sortera en array i java avtagande, minskande?

Så jag har en klass med statiska metoder och en annan klass som använder metoder från den. En av metoderna ska sortera en array (vilket är parametern) i avtagande format. Så den börjar på det högsta värdet och går neråt. Har sökt rundor en del och har förstårr det som att allt jag behöver göra är att importera collections och skriva detta; Arrays.sort(array, Collections.reverseOrder()); men Eclipse ger mig bara felet att sort metoden enbart kan ta en int array som input, inget annat. Någon som vet vad jag kan testa? Såhär ser min kod ut:

//Soterar arrayen krympande public static int sortDec(int[] array){ Arrays.sort(array, Collections.reverseOrder()); return 0; }

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Norrland
Registrerad
Apr 2012
Skrivet av Baxtex:

Så jag har en klass med statiska metoder och en annan klass som använder metoder från den. En av metoderna ska sortera en array (vilket är parametern) i avtagande format. Så den börjar på det högsta värdet och går neråt. Har sökt rundor en del och har förstårr det som att allt jag behöver göra är att importera collections och skriva detta; Arrays.sort(array, Collections.reverseOrder()); men Eclipse ger mig bara felet att sort metoden enbart kan ta en int array som input, inget annat. Någon som vet vad jag kan testa? Såhär ser min kod ut:

//Soterar arrayen krympande public static int sortDec(int[] array){ Arrays.sort(array, Collections.reverseOrder()); return 0; }

Ingen java guru, men är det inte lättare att köra "Arrays.sort(array)" och sedan reversa arrayet?

2600k @ STOCK <|> GTX 970 Omega!<|> Nån samsung 500gb ssd <|> 8 GB Kingston Hyper X <|> BenQ XL2420t
"Det finns inget skrot, bara gamla delar som kan användas på nya sätt" - Mulle Meck

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av elklazor:

Ingen java guru, men är det inte lättare att köra "Arrays.sort(array)" och sedan reversa arrayet?

Det skulle väl kunna gå om jag enbart skulle skriva ut det direkt med metoden. Nu ska jag dock retunera arrayen.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Karlskrona
Registrerad
Jul 2008

Du bör kunna göra något liknande:

sort(T[] a, Comparator<? super T> c) Arrays.sort(a, Collections.reverseOrder());

Wiiiiiiiiiiii

Trädvy Permalänk
Medlem
Plats
Norrland
Registrerad
Apr 2012
Skrivet av Baxtex:

Det skulle väl kunna gå om jag enbart skulle skriva ut det direkt med metoden. Nu ska jag dock retunera arrayen.

Och varför skulle du inte kunna returnera ett reversat array?

2600k @ STOCK <|> GTX 970 Omega!<|> Nån samsung 500gb ssd <|> 8 GB Kingston Hyper X <|> BenQ XL2420t
"Det finns inget skrot, bara gamla delar som kan användas på nya sätt" - Mulle Meck

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009
Skrivet av elklazor:

Och varför skulle du inte kunna returnera ett reversat array?

Det är bättre att hålla koden enkel och ren, speciellt när det redan finns en funktion som gör det önskade, istället för att gå omvägar.

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Norrland
Registrerad
Apr 2012
Skrivet av DunderKlumpen:

Det är bättre att hålla koden enkel och ren, speciellt när det redan finns en funktion som gör det önskade, istället för att gå omvägar.

Helt klart, men frågan gällde snarare hans kommentar om att han nu behövde returnera ett array

Skickades från m.sweclockers.com

2600k @ STOCK <|> GTX 970 Omega!<|> Nån samsung 500gb ssd <|> 8 GB Kingston Hyper X <|> BenQ XL2420t
"Det finns inget skrot, bara gamla delar som kan användas på nya sätt" - Mulle Meck

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009
Skrivet av elklazor:

Helt klart, men frågan gällde snarare hans kommentar om att han nu behövde returnera ett array

Skickades från m.sweclockers.com

Visst, men det känns off-topic.

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

För att svara på frågan; såhär ser min kod ut som kallar på metoden:

IntegerArrays.sortDesc(test2); message += "test2: " + IntegerArrays.toString( test2 ) + "\n";

Jag har toString metoden som skriver ut arrayen.

Skrivet av sebbe605:

Du bör kunna göra något liknande:

sort(T[] a, Comparator<? super T> c) Arrays.sort(a, Collections.reverseOrder());

Har testat men fattar ingenting av den översta raden, varken vad den gör eller var den ska placeras, antaligen därför det inte funkar.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009
Skrivet av Baxtex:

För att svara på frågan; såhär ser min kod ut som kallar på metoden:

IntegerArrays.sortDesc(test2); message += "test2: " + IntegerArrays.toString( test2 ) + "\n";

Jag har toString metoden som skriver ut arrayen.

Har testat men fattar ingenting av den översta raden, varken vad den gör eller var den ska placeras, antaligen därför det inte funkar.

Den övre raden visar bara hur sort-funktionen är definierad; den tar en array "a" och hur den ska sorteras "c":
http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.htm...

Inget du ska lägga in i koden alltså. Det är den nedre raden du använder, med test2 istället för a.

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av DunderKlumpen:

Den övre raden visar bara hur sort-funktionen är definierad; den tar en array "a" och hur den ska sorteras "c":
http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.htm...

Inget du ska lägga in i koden alltså. Det är den nedre raden du använder, med test2 istället för a.

Aha. Har dock som sagt testat det och får till svar att sort inte kan ta en collector input.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009
Skrivet av Baxtex:

Aha. Har dock som sagt testat det och får till svar att sort inte kan ta en collector input.

Klistra in din kod i pastebin och ge oss en länk, så blir det mycket enklare att felsöka din kod och se vart du gjort fel. Du ser i dokumenteringen att Sort kan ta en Comparator<? super T> c

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av DunderKlumpen:

Klistra in din kod i pastebin och ge oss en länk, så blir det mycket enklare att felsöka din kod och se vart du gjort fel. Du ser i dokumenteringen att Sort kan ta en Comparator<? super T> c

Javisst:

http://pastebin.com/UyH7zhxY Klassen som anropar/Använder metoderna.
http://pastebin.com/jqn5SDCG Klassen med metoderna.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009
Skrivet av Baxtex:

Javisst:

http://pastebin.com/UyH7zhxY Klassen som anropar/Använder metoderna.
http://pastebin.com/jqn5SDCG Klassen med metoderna.

Jag tror inte den kan sortera arrayer med primitiver, försök byt int till en Integer-array istället.

Se här, t.ex: http://stackoverflow.com/questions/1694751/java-array-sort-de...

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av DunderKlumpen:

Jag tror inte den kan sortera arrayer med primitiver, försök byt int till en Integer-array istället.

Se här, t.ex: http://stackoverflow.com/questions/1694751/java-array-sort-de...

Kan väl gå men är inte det som är tanken. Detta är en skoluppgift och vi har fått klassen som använder metoderna och den ska vi inte ändra något i.

public static void sortDesc(int[] array){ Arrays.sort(array); int[] newArray = new int[array.length]; int index = 0; for(int i = newArray.length; i > 0; i--){ newArray[index] = array[i]; index++; }

Har här även testat att göra en ny array och lägga in den baklänges men utan resultat.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Registrerad
Jan 2009
Skrivet av Baxtex:

Kan väl gå men är inte det som är tanken. Detta är en skoluppgift och vi har fått klassen som använder metoderna och den ska vi inte ändra något i.

public static void sortDesc(int[] array){ Arrays.sort(array); int[] newArray = new int[array.length]; int index = 0; for(int i = newArray.length; i > 0; i--){ newArray[index] = array[i]; index++; }

Har här även testat att göra en ny array och lägga in den baklänges men utan resultat.

Är det en skoluppgift kan det vara bra att dubbelkolla vad poängen är, det kan ju vara tänkt att man ska implementera sorteringen själv.

Ta ett steg tillbaka. Vad förväntar sig den som anropar din metod sortDesc ska hända? Vad är det som ska ändras? Finns det med tanke på det en rimlig förklaring till att din nya array inte gjorde någon skillnad?

Trädvy Permalänk
Medlem
Plats
Västra götaland
Registrerad
Sep 2012
Skrivet av Baxtex:

Kan väl gå men är inte det som är tanken. Detta är en skoluppgift och vi har fått klassen som använder metoderna och den ska vi inte ändra något i.

Har inte kollat igenom det du länkat men låter som uppgiften är att implementera sortering, en väldigt klassisk skoluppgift. Råder då om att implementera bubble sort då det är så vansinnigt simpelt. Lika lätt med invers sortering, du bara ändrar > till < eller vice versa. Bubble sort är inte så effektiv i exekverings tid men väldigt lätt att implementera.

Har svårt att tro att du bara ska lägga in en rad där du utnyttjar en funktion ur standard bibloteket...

Kan låta oavsiktligt aggressiv.
Citera eller @philipborg om du vill att jag ska läsa dina svar.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2004

Som tidigare skrev, du ska implementera sorteringen själv och inte via ett bibliotek.

Som någon annan här tipsade om så kolla på bubble sort!

"Happiness is only real when shared"

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av fourbyfour:

Är det en skoluppgift kan det vara bra att dubbelkolla vad poängen är, det kan ju vara tänkt att man ska implementera sorteringen själv.

Ta ett steg tillbaka. Vad förväntar sig den som anropar din metod sortDesc ska hända? Vad är det som ska ändras? Finns det med tanke på det en rimlig förklaring till att din nya array inte gjorde någon skillnad?

Skrivet av philipborg:

Har inte kollat igenom det du länkat men låter som uppgiften är att implementera sortering, en väldigt klassisk skoluppgift. Råder då om att implementera bubble sort då det är så vansinnigt simpelt. Lika lätt med invers sortering, du bara ändrar > till < eller vice versa. Bubble sort är inte så effektiv i exekverings tid men väldigt lätt att implementera.

Har svårt att tro att du bara ska lägga in en rad där du utnyttjar en funktion ur standard bibloteket...

Skrivet av sebbeharry:

Som tidigare skrev, du ska implementera sorteringen själv och inte via ett bibliotek.

Som någon annan här tipsade om så kolla på bubble sort!

EDIT:

Jag testade Bubble sort bara för skojs skull och det funkade faktiskt! Vet inte om det är det som menas, men det är väl ett sätt att lösa det på.
Jo jag känner till dem vanligaste sorterings algoritmerna, men är ganska säker på att vi ska använda selektion sort. Detta är en av de första uppgifterna och borde inte vara så svårt, har löst alla andra. Såhär står det i uppgiften:

"Du ska skriva klassen IntegerArray. Klassen ska placeras i paketet arrays. Klassen ska innehålla ett
antal klassmetoder:
• sortDesc vilken sorterar talen i en heltalsarray avtagande, t.ex. {89,34,7,3}"

Det står inte mycket mer än så, är det något speciellt vi ska tänka på så brukar det vara angivet. I sortAscending metoden så använde jag bara Arrays.sort(array); vilket var hur lätt som helst, även detta som gåtts igenom på föreläsningarna. Så det borde vara någon slags implementation på den vägen. Jag tror inte att vi ska implementera en egen sort teknik.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/