Avatar billede javabegynder Nybegynder
03. januar 2008 - 15:05 Der er 4 kommentarer

opsamling af data

Jeg har skrevet et program igennem en FOR løkke udregner en masse integers, disse integers vil jeg gerne have opsamlet.. Helst i en ekstern fil hvor jeg der skal være en liste over hvilke tal der blev returneret og hvor mange gange de forskellige tal blev returnet.

Hvordan gør man dette smartest?

I må meget gerne skære det lidt ud i pap da jeg er ret ny i Java.
Avatar billede renerr Nybegynder
03. januar 2008 - 16:46 #1
hej,

Hvorfor vil du have det lagt i en fil?

Det er nok lidt lettere at hjælpe, hvis du giver lidt flere detaljer.
Avatar billede javabegynder Nybegynder
03. januar 2008 - 18:54 #2
hej, jeg ønsker det i en ekstern fil da jeg gerne vil bruge de data jeg får til noget statistik over resultatet.

Mere info:

Jeg får fra min lække en række tal som skal indexeres, disse tal blive indtil videre bare udskrevet i konsollen, og bliver ikke gemt nogen steder. I stedet for dette ønsker jeg ikke tallene udskrevet. Jeg vil - på en eller anden måde, ikke nødvendigvis i en fil , men evt i et Array eller lign - have dem gemt så jeg senere kan bruge dem.
Det output jeg ønsker skal se nogenlunde sådan her ud:

Tal:      antal forekomster:

34                3
54                12
65                2
78                143
etc.              etc.

på den måde kan jeg nemt lave et diagram over hvor mange forekomster jeg fik af de forskellige tal.

Det jeg søger er en måde at håndtere store mængder af tal på den måde. Jeg kunne forestille mig at et ArrayList kunne bruges, men det er ret uhensigtsmæssigt bare at bruge adressen i ArrayListen til en bestemt værdi af tallet da det vil kræve en meget stor liste og en masse spild plads..

håber det hjalp lidt.
Avatar billede jakoba Nybegynder
03. januar 2008 - 19:58 #3
Hvad der er bedst afhænger af om du ved noget om hvilke tal du kan forvente at få.

Hvis alle tallene er i et rimeligt lille interval (fx imellem 0 og 99) er det nemmest at gøre det med et array.

int[] tælleArray = int[100];  // array med indeks værdier fra 0 til 99.
for (int i=0; i<100; i++) {
    tælleArray[i] = 0;        // initier alle celler til 0
}
while ( der er flere tal at hente ) {
    hent et tal
    tælleArray[tal]++;        // arraycellen tæller hvormange gange det tal er hentet
]
// og nu kan du så udskrive arrayet
for (int i=0; i<100; i++) {
    System.out.println( "" +i +" forekom " +tælleArray[i] " gange." );
}

Men hvis tallene kan være hvadsomhelst er det bedre at bruge et HashMap hvor du så for hver tal der kommer ser om der i mappet findes en post med det tal som nøgle. Hvis der ikke er nogen post opretter du en med værdien 1, hvis der allerede er en post oger du den posts værdi med 1

mvh JakobA
Avatar billede javabegynder Nybegynder
03. januar 2008 - 21:26 #4
Tallene vil lægge komme til at blive ret store. Jeg havde ellers overvejet at bruge den fremgangsmåde du beskriver der, men da jeg tallene tit er 4-5-6 cifre med en spredning på et par hundrede, vil jeg ende med et Array hvor der er noget i under 1% af cellerne hvilket jeg ser som ret meget spild af hukommelse.

Derimod lyder det som om hashMap er en bedre løsning. Den vil jeg lige læse lidt op på. Tak for tippet :)
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



IT-JOB