Avatar billede langkiller Nybegynder
19. marts 2012 - 12:39 Der er 17 kommentarer og
1 løsning

Sorter Strings alfabetisk (fra fil) uden brug af arrays

Siider med en noget besværlig opgave. Programmet skal sorterer en liste med navne fra en txt fil og sorterer dem efter efternavn. Det skal laves uden brug af arrays. Indtil videre har jeg følgende, men kan ikke rigtig komme videre:

http://pastebin.com/EZh8a5MX
Avatar billede arne_v Ekspert
19. marts 2012 - 13:55 #1
Er ArrayList<Person> muligt i frohold til opgave beskrivelsen?
Avatar billede langkiller Nybegynder
19. marts 2012 - 14:03 #2
nej der må slet ikke bruges arrays desværre.
Avatar billede arne_v Ekspert
19. marts 2012 - 14:14 #3
ArrayList<Person> er vel ikke et array??
Avatar billede langkiller Nybegynder
19. marts 2012 - 14:25 #4
Nej det er det nok ikke, men det hører vel stadig under emnet "array".. eller?

Vi har har ikke haft om arrays i java endnu. Det er derfor at vi har fået den begrænsning på opgaven. Kunne godt tænke mig at prøve lave den uden.

Og det burde da vel kunne lade sig gøre når nu vi har fået stillet sådan en opgave (selvom der dog ikke er nogen i klassen der har formået at gøre det endnu)
Avatar billede langkiller Nybegynder
19. marts 2012 - 14:34 #5
Hmm det kan godt være det ikke er det, men det hører vel under emnet array .. eller?

Vi har bare ikke været igennem emnet array i java endnu så det er derfor vi har fået den begrænsning på opgaven.

Men det burde da vel godt kunne lade sig gøre, når nu vi har fået stillet sådan en opgave (selvom der ikke er nogen i klassen der formået at løse det endnu)
Avatar billede arne_v Ekspert
19. marts 2012 - 14:38 #6
Hvis der er et ukendt antal linier i den fil, saa kan jeg ikke se andre loesninger end array altsaa Person[] eller en collection f.eks. ArrayList<Person>.
Avatar billede langkiller Nybegynder
19. marts 2012 - 14:43 #7
hmm okay.. holder lige spørgsmålet åbent hvis der skulle komme nogle bud på det.
Ellers mange tak for hjælpen arne_v
Avatar billede vagnk Juniormester
19. marts 2012 - 15:23 #8
Jeg synes det er en helt urimelig begrænsning i opgaven at man ikke må bruge arrays. Men OK hvis det I skal lære er at man kan sortere andet end arrays, eller at man ikke har lov til at bruge diverse array-funktioner (Arrays.sort()), så har opgaven måske en ide.

Som minimum må I have mulighed for at indeksere f.eks. en konstruktion som "int temp = x[i];  x[i] = x[i+1];  x[i+1] = temp;".

Hvis det er tilladt læser du hele filen ind, separerer linjerne på ; bruger den sidste del i en bubblesort hvor der er hele linjen du bytter om på.

Hvis du spørger hvad en bubblesort er - og det kan jeg næsten høre - kan du sagtens finde noget på spindet, men hvis du bare kopierer lærer du ikke noget. Mit forslag:
Gå ind på http://www.leepoint.net/notes-java/data/arrays/32arraybubblesort.html og find ud af hvad der foregår i den første mest primitive bubblesort. Forsøg så at forbedre den så der bliver færre gennemløb of check eventuelt med de andre bubblesorts.

Hvis du også kunne forfine den til at vise hvordan den sorterer i et gennemløb når du trykker på en knap, vil du se hvordan elementerne bevæger sig opad og nedad. Næsten samme underholdningsværdi som at se to skjorter slås i en tørretumbler.
`
Avatar billede langkiller Nybegynder
19. marts 2012 - 14:49 #9
Her er opgavebeskrivelsen:

Lav et Java program, der indlæser og anvender filen :
Kursusdeltagere_uge11.csv
Den indeholder fornavn(e) og efternavn på Dat12Vs studerende i uge 11, 2012
sorteret efter fornavn. 
Der er en person pr. linie og oplysningerne er adskilt af tegnet  ;  (semikolon).
Opgaven består i at producerer en ny fil med tilsvarende layout, hvor alle er sorteret
efter efternavn. Løsningen må IKKE anvende arrays.
Avatar billede mireigi Novice
19. marts 2012 - 17:12 #10
Nu kender jeg ikke noget til Java, men skulle jeg lave den i C# ville jeg gøre således:
http://pastebin.com/MRrQnZz9
Avatar billede arne_v Ekspert
19. marts 2012 - 15:26 #11
Jeg mener stadig at ArrayList<Person> maa vaere det rigtige.
Avatar billede vagnk Juniormester
19. marts 2012 - 15:58 #12
Sikkert. Jeg er mere og mere overbevist om at det er pointen med Array.sort, der er bagrunden for at der ikke må anvendes arrays. Det er ikke selve typen array men klassen Array. Jeg synes godt langkiller kan gøre opmærksom på at opgaven i høj grad er dårligt formuleret.
Avatar billede Slettet bruger
19. marts 2012 - 21:52 #13
Måske lidt på et sidespor, men synes det er meget relevant for en programmør at vide. Hvordan sorterer man tekster? Det afhænger primært af det sprog (locale) du bruger (man kan finde mere om emnet hvis man søger efter unicode collation, og java har en klasse der hedder java.util.Collator der kan bruges til det samme).

På dansk vil et efternavn der begynder med Aa typisk stå sidst sammen med de andre ord der starter med Å, se bare hvordan en dansk windows sorterer mapper der begynder med aa.

Men ingen regler uden undtagelser. Med den analoge telefonbog, kan du fortælle dem hvis dit efternavn der begynder med Aa (og ikke udtales som å) står forkert og så står du pludselig under A i stedet. :)
Avatar billede arne_v Ekspert
21. marts 2012 - 00:20 #14
Det er helt standard at skulle laere sorterings algoritmer.

Men det er normalt at bruge enten array eller ArrayList til det.
Avatar billede mireigi Novice
21. marts 2012 - 01:23 #15
At lære sorterings algoritmer uden brug af Array i nogen afskygning er lidt bøvlet. Især med en så kompliceret opgave du er blevet stillet.

Vi skulle blot sortere en string med tegnene a-Z inden vi skiftede til sorteringen med Arrays.

@arne_v: Kan forslaget jeg har indsendt i #12 umiddelbart konverteres til Java? Det fungerer i C#, men er ligegyldigt, hvis funktionaliteten ikke kan genskabes i Java.
Avatar billede arne_v Ekspert
21. marts 2012 - 02:08 #16
Det burde vaere ret nemt at konvertere 1:1 til Java.

bool -> boolean
s.Length -> s.length()
s.IndexOf("x") -> s.indexOf("x")
s.Substring(start, end-start) -> s.substring(start, end)
StreamReader -> BufferedReader
StreamWriter -> PrintWriter

og lignende trivielle aendringer.

Men jeg kan ikke lide modellen med at gemme i en String.

Og der er ogsaa et par detaljer i din kode som jeg ville have lavet anderledes.
Avatar billede langkiller Nybegynder
28. marts 2012 - 21:02 #17
hey alle, vi fik en længere forklaring til undervisningen, men han forstod godt at vi ikke fik løst den da det var en rimelig svær opgave at stille til folk der er relativt nye i java.

Men tak for alle jeres svar. Dem af jer der vil have points kan lægge svar nu. Ellers lukker jeg det bare selv
Avatar billede langkiller Nybegynder
18. april 2012 - 00:23 #18
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester