Sortera en array i java avtagande, minskande?

Permalänk
Medlem

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; }

Permalänk
Medlem
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?

Visa signatur

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

Permalänk
Medlem
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.

Permalänk
Medlem

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

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

Visa signatur

Wiiiiiiiiiiii

Permalänk
Medlem
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?

Visa signatur

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

Permalänk
Keeper of Traditions
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.

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || 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.

Permalänk
Medlem
Skrivet av Dunder:

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

Visa signatur

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

Permalänk
Keeper of Traditions
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.

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || 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.

Permalänk
Medlem

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.

Permalänk
Keeper of Traditions
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.

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || 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.

Permalänk
Medlem
Skrivet av Dunder:

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.

Permalänk
Keeper of Traditions
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

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || 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.

Permalänk
Medlem
Skrivet av Dunder:

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.

Permalänk
Keeper of Traditions
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...

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || 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.

Permalänk
Medlem
Skrivet av Dunder:

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.

Permalänk
Medlem
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?

Permalänk
Medlem
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...

Visa signatur

Citera eller @philipborg om du vill att jag ska läsa dina svar.

Permalänk
Medlem

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!

Visa signatur

"Happiness is only real when shared"

Permalänk
Medlem
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.