[Java] Hjälp med sortering av double

Permalänk
Medlem

[Java] Hjälp med sortering av double

Tjena!

Har stött på ett problem när jag gjorde en uppgift från Java direkt med Swing. Uppgiften går ut på att man ska beräkna poängen utav ett simhopp vilket görs genom att 7 domare ger varsin poäng från 0 till 10 och den största och lägsta poängen räknas bort och därefter beräknas medelvärdet utav de 5 återstående poängen. Sedan multipliceras detta med 3 och slutligen multipliceras detta med ett tal som anger hoppets svårighetsgrad. Programmet ska först läsa in svårighetsgraden och sedan de 7 domarpoängen, sedan ska programmat visa hoppets poäng efter att ha beräknad den.

Jag vet hur man skriver programmet om man använder arrays och keyboard read men denna uppgift kommer från kapitel 1 i boken där man använder sig utav JOptionPane rutor och int samt double.

Jag har kommit så här långt men har kört fast när det gäller att ta bort den största samt minsta poängen, inget utav detta har nämnts hittills i kapitlet så jag är lite nyfiken på hur man ska utföra detta med det spannet man har. Så här långt har jag kommit hittills:

import javax.swing.*; public class simhopp { public static void main(String[]args) { String svårighet = JOptionPane.showInputDialog(null,"Ange hoppets svårighetsgrad."); double a = Double.parseDouble(svårighet); String poäng1 = JOptionPane.showInputDialog(null, "Ange domare 1 poäng."); double B = Double.parseDouble(poäng1); String poäng2 = JOptionPane.showInputDialog(null, "Ange domare 2 poäng."); double C = Double.parseDouble(poäng2); String poäng3 = JOptionPane.showInputDialog(null, "Ange domare 3 poäng."); double D = Double.parseDouble(poäng3); String poäng4 = JOptionPane.showInputDialog(null, "Ange domare 4 poäng."); double E = Double.parseDouble(poäng4); String poäng5 = JOptionPane.showInputDialog(null, "Ange domare 5 poäng."); double F = Double.parseDouble(poäng5); String poäng6 = JOptionPane.showInputDialog(null, "Ange domare 6 poäng."); double G = Double.parseDouble(poäng6); String poäng7 = JOptionPane.showInputDialog(null, "Ange domare 7 poäng."); double H = Double.parseDouble(poäng7); } }

Permalänk
Medlem

Använd listor

Du kan lägga alla variabler i en lista, t.ex. LinkedList. Sen loopar du igenom den några ggr och plockar ut elementen i den storleksordning du önskar. Lägg sen in de utplockade värdena i en ny lista, så har du alla samlade och sorterade. För att ta bort det största resp. det minsta talet anropar du removeFirst och removeLast. Fler funktioner hos listor hittar du i dokumentationen.

Permalänk

Det du kan göra är att använda två variabler max,min i början av din kod sätter du båda till värdet på det första talet sen om en av talen som matas in är större än max eller mindre än min så blir det, det nya max/min.

Sen tycker jag du borde lösa inmatning av poäng med hjälp av en loop och ett fält istället för att ha samma kod 7 gånger.

typ:
for(int i = 0; i<7; i++){
String poäng1 = JOptionPane.showInputDialog(null, "Ange domare " i " poäng.");
pointArray[i] = Double.parseDouble(poäng1);
}

Visa signatur

Bison: You have made me a very happy man.
Colonel William F. Guile: And next, I'll make you a dead one.

Permalänk
Medlem
Skrivet av Ablim:

Du kan lägga alla variabler i en lista, t.ex. LinkedList. Sen loopar du igenom den några ggr och plockar ut elementen i den storleksordning du önskar. Lägg sen in de utplockade värdena i en ny lista, så har du alla samlade och sorterade. För att ta bort det största resp. det minsta talet anropar du removeFirst och removeLast. Fler funktioner hos listor hittar du i dokumentationen.

Tvekar inte en sekund på att det funkar men är mer nyfiken på hur man löser det utan såna grejer då boken inte gått igenom det. Mitt problem är att lösa uppgiften med hjälp utav JOptionPane och väldigt basic programmering i java.

Skrivet av SlaktarFar:

Det du kan göra är att använda två variabler max,min i början av din kod sätter du båda till värdet på det första talet sen om en av talen som matas in är större än max eller mindre än min så blir det, det nya max/min.

Sen tycker jag du borde lösa inmatning av poäng med hjälp av en loop och ett fält istället för att ha samma kod 7 gånger.

typ:
for(int i = 0; i<7; i++){
String poäng1 = JOptionPane.showInputDialog(null, "Ange domare " i " poäng.");
pointArray[i] = Double.parseDouble(poäng1);
}

Förstår delvis vad du menar med max resp. min variablerna, vad menar du när du säger "första talet"? Kan du beskriva det i kod/pseudokod?

Jo men som jag skrev så vill jag lösa uppgiften utan array

Permalänk
Skrivet av trolljägaren:

Tvekar inte en sekund på att det funkar men är mer nyfiken på hur man löser det utan såna grejer då boken inte gått igenom det. Mitt problem är att lösa uppgiften med hjälp utav JOptionPane och väldigt basic programmering i java.

Förstår delvis vad du menar med max resp. min variablerna, vad menar du när du säger "första talet"? Kan du beskriva det i kod/pseudokod?

Jo men som jag skrev så vill jag lösa uppgiften utan array

Det jag menar var typ

double max = a;
double min = a;

Sedan när du läser in nästa kollar du bara om den är större än max eller mindre än min

if(b < min)
min = b

if(b > max)
max=b

När du gjort detta för alla tal du ska läsa in kommer det största talet finnas i max, och det minsta i min.

Visa signatur

Bison: You have made me a very happy man.
Colonel William F. Guile: And next, I'll make you a dead one.

Permalänk
Medlem

Okej nu förstår jag! Tack för hjälpen!

Permalänk
Medlem

List<Double> list = new ArrayList<Double>();
list.add(Double.parseDouble(poäng1));
... för alla poäng
Collections.sort(list);
Funkar om du vill "fuska" genom att använda Javas util klasser. När du fått Basic-versionen å funka kanske?:)

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

List<Double> list = new ArrayList<Double>();
list.add(Double.parseDouble(poäng1));
... för alla poäng
Collections.sort(list);
Funkar om du vill "fuska" genom att använda Javas util klasser. När du fått Basic-versionen å funka kanske?:)

Ska testa det nu när programmet är klart, blev sjukt mycket mer kod än om man hade använt lite mer avancerat programmering med t.ex. array mm. men höll på att bli galen då jag inte förstod hur man skulle kunna lösa den utan det så jag vara bara tvungen att veta.

Tack för hjälpen allihop och god jul!