[Java] Array sorteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mobb_Deep
  • Registratie: Juli 2007
  • Laatst online: 14-10 09:38
Beste medetweakers,

Momenteel ben ik een simpel programmaatje aan het schrijven.

Er wordt om een naam gevraagd en daarbij wordt een willekeurige tijd gegenereerd.
Dit wordt opgeslagen in een .txt bestand.

Voorbeeld .txt bestand:

Henk Bot 84.23
Jos Dekker 45.25
Adrie Willemse 53.32

De tijden worden met een \t (tab) gescheiden v.d. naam. Het .txt bestand lees ik vervolgens weer uit en stop ik in een array.

Alleen nu wil ik de array sorteren op alleen de tijd, vervolgens moet de naam + tijd weergegeven worden in labels. (dat weergeven is geen probleem)

Dus Jos Dekker moet bovenaan komen, Adrie op 2 en Henk op 3.

Jos Dekker 45.25
Adrie Willemse 53.32
Henk Bot 84.23

Ik heb veel gevonden op sorteren op namen of op een getallen. Maar sorteren op getal waar tekst voorstaat niet echt.

Iemand ervaringen / tips?

Alvast bedankt! :)

[ Voor 3% gewijzigd door Mobb_Deep op 22-06-2010 16:49 ]

De glazen horen klinken, maar niet weten waar de tap is.


Acties:
  • 0 Henk 'm!

  • kemphaas
  • Registratie: November 2004
  • Laatst online: 16:38
Weet niet alles van java, maar wel van C#. Je zou je string met naam en tijd kunnen splitten zodat je alleen de tijd overhoud. Dan omzetten naar een float, double oid, en dan gewoon sorteren.

Werk hard als je tijd hebt, dan heb je tijd als je hard moet werken.


Acties:
  • 0 Henk 'm!

  • El_kingo
  • Registratie: Mei 2002
  • Laatst online: 17-03 11:17
Ik zou de naam en de tijd inlezen in een twee dimensionale array.
(Als je niet weet wat dat is: http://leepoint.net/notes-java/data/arrays/arrays-2D-2.html)

Vervolgens de array sorteren d.m.v. een bubble-sort o.i.d.
De implementatie van een bubble sort is overal wel te vinden.

Acties:
  • 0 Henk 'm!

  • Comp_Lex
  • Registratie: Juni 2005
  • Laatst online: 22:22
Als de naam er niet toe doet dan verwijder je dat gewoon van het te sorteren data. Je split de naam en tijd in twee aparte verzamelingen strings.

Acties:
  • 0 Henk 'm!

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ik zou als ik jou was een struct aanmaken met daarin tijd en naam. Alle entries gooi je in een list, en vervolgens ga je gewoon een bubblesort (of andere sortering doen).
Ik zou een 2D array niet gebruiken hiervoor.

Acties:
  • 0 Henk 'm!

  • mtsr
  • Registratie: December 2008
  • Laatst online: 01-10 21:46
Je kunt ook arrays sorteren met een eigen Comparator:http://java.sun.com/j2se/...20java.util.Comparator%29

Dit ziet er op het eerste gezicht misschien ingewikkeld uit, maar dat is het niet. Succes en als je er niet uitkomt zeker nog om hulp vragen.

Acties:
  • 0 Henk 'm!

  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 13-10 14:25
Of je maakt een object met 2 attributen, een naam en een tijd. Vervolgens stop je die in een array welke je vervolgens kan sorteren met met de Array.sort methode. In dit geval hou je de gegevens makkelijk bij elkaar maar zijn ze toch gescheiden. Je kan dan een Comparator gebruiken of de equals() methode implementeren op je object.

Het is maar een suggestie, dus als je het te bloated vind moet je het niet doen he!

De specifieke sortmethode: http://java.sun.com/javas...[], java.util.Comparator)

hallo


Acties:
  • 0 Henk 'm!

  • Mobb_Deep
  • Registratie: Juli 2007
  • Laatst online: 14-10 09:38
Ik heb ook het idee dat je met een 2D array de namen en de tijden doorelkaar ga halen (denk ik).

extra info:

Iemand drukt een knop in, de tijd gaat lopen, vervolgens drukt hij op een andere plaats een knop in en voert zijn naam in.

De glazen horen klinken, maar niet weten waar de tap is.


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Maak objecten van deze entries en gebruik de een compare interface (IComparer?) en dan kun je met een van de standaard Vector<> functies waar je alles in zet, alles netjes sorteren.

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 14-10 10:34
Mobb_Deep schreef op dinsdag 22 juni 2010 @ 16:44:
Beste medetweakers,

Momenteel ben ik een simpel programmaatje aan het schrijven.

Er wordt om een naam gevraagd en daarbij wordt een willekeurige tijd gegenereerd.
Dit wordt opgeslagen in een .txt bestand.

Voorbeeld .txt bestand:

Henk Bot 84.23
Jos Dekker 45.25
Adrie Willemse 53.32

De tijden worden met een \t (tab) gescheiden v.d. naam. Het .txt bestand lees ik vervolgens weer uit en stop ik in een array.
Het eerst opslaan in een bestand lijkt me nogal omslachtig. Waarom stop je het na invoer niet meteen in je array?

En voor sorteren: gebruik een List (bijvoorbeeld ArrayList) en Collections.sort() met een eigen Comparator.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
List<String> lijst = Arrays.asList(new String[] {
    "Henk Bot\t84.23",
    "Jos Dekker\t45.25",
    "Adrie Willemse\t53.32"
});

Collections.sort(lijst, new Comparator<String>() {
    public int compare(String lhs, String rhs) {
        Double tijdLhs = Double.parseDouble(lhs.substring(lhs.lastIndexOf('\t')));
        Double tijdRhs = Double.parseDouble(rhs.substring(rhs.lastIndexOf('\t')));
        return tijdLhs.compareTo(tijdRhs);
    }
});

for (String s: lijst) {
    System.out.println(s);
}

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:12

Creepy

Tactical Espionage Splatterer

Mobb_Deep schreef op dinsdag 22 juni 2010 @ 17:00:
Ik heb ook het idee dat je met een 2D array de namen en de tijden doorelkaar ga halen (denk ik).
Dat heb je echt verkeerd. Zorgt dat je de tijd los hebt, anders kan je er niet op sorteren. Een 2d array sorteren, of 2 arrays (!) sorteren zijn prima oplossingen wat iemand met basiskennis van Java gewoon zou moeten kunnen oplossen. Dus wat heb je specifiek al geprobeerd om de tijd los te halen en daarop te sorteren en wat lukt daar dan niet mee?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Mobb_Deep
  • Registratie: Juli 2007
  • Laatst online: 14-10 09:38
matthijsln schreef op dinsdag 22 juni 2010 @ 17:33:
[...]


Waarom stop je het na invoer niet meteen in je array?
Als ik het programma dan sluit zijn de namen + tijden weg, dat is de enige reden...

Thnxs voor de replays overigens!! _/-\o_

p.s. ik ben inderdaad een beginner...

[ Voor 9% gewijzigd door Mobb_Deep op 22-06-2010 18:26 ]

De glazen horen klinken, maar niet weten waar de tap is.


Acties:
  • 0 Henk 'm!

  • IntToStr
  • Registratie: December 2003
  • Laatst online: 23:35
Kom op, wat een overdreven gedoe. Gewoon een comparator inline definiëren en in de compareTo de compare van de tijd gebruiken.

Vergeet alles over arrays en zaken los sorteren.

Acties:
  • 0 Henk 'm!

  • Comp_Lex
  • Registratie: Juni 2005
  • Laatst online: 22:22
Ja, dat is inderdaad wat je wil in je sorteer algoritme, maar je moet eerst wat processing doen voordat je direct kan sorteren, want anders komt er niks terecht van "de tijd gebruiken".

Acties:
  • 0 Henk 'm!

  • IntToStr
  • Registratie: December 2003
  • Laatst online: 23:35
Ah, ik had het topic op mijn telefoon gelezen en een stukje gemist :)

Inderdaad heb je wel een simpele parsemethode nodig om de velden van een rij in te lezen in een object dat voor elk van de velden een variabele van het juiste type heeft.

Rommelen met allerlei stringfuncties zoals hierboven in het voorbeeld zou ik niet doen. Maak een simpele DTO class en zet daar de comparator op. Duidelijker te lezen, te begrijpen en te onderhouden. Je kunt er dan ook van alles mee doen, waaronder uiteraard gebruiken om labels weer te geven of zo.

Acties:
  • 0 Henk 'm!

  • Mobb_Deep
  • Registratie: Juli 2007
  • Laatst online: 14-10 09:38
Thanks voor de reacties! Topic mag dicht...

De glazen horen klinken, maar niet weten waar de tap is.


Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 17:37

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Topics gaan niet dicht op verzoek of als het probleem is opgelost, enkel als ze niet aan de regels voldoen (zie ook: Het algemeen beleid #topiceinde).

We zijn natuurlijk nog wel even benieuwd naar hoe je het uiteindelijk hebt opgelost, aangezien dat ook nuttig kan zijn voor iemand anders die in de toekomst met deze kwestie zit :)

[ Voor 11% gewijzigd door Orion84 op 23-06-2010 14:58 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr

Pagina: 1