Forrige tråd
Neste tråd
Print tråd

Legge sammen tall i en tabell i java

Legge sammen tall i en tabell i java #1928638 27/02/2015 18:48
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Hei
Jeg har laget et program som trekker tilfeldige tall og legger dem inn i en tabell.
Tabellen blir sortert, og der etter skal jeg legge sammen de like tallene i tabellen
Jeg har et forslag her, men det virket ikke Forslag?

//forsøk på å finne like tall
for(int i=0;i<tallRekke.length;i++){

if (tallRekke[i] = = tallRekke[i+1]){

sum= tallRekke[i]+tallRekke[i+1];


Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928644 27/02/2015 19:04
Registrert: Sep 2003
Innlegg: 1,724
tobiast Offline
Ivrig
Offline
Ivrig
Registrert: Sep 2003
Innlegg: 1,724
Du må vel ha en sum for hvert tall i tabellen da? Og da er det vel greit å lagre summene i en HashMap() kanskje?

Når det gjelder letingen din etter like tall, så løper du gjennom hele tabellen og sammenlikner tallene som kommer etter hverandre i tabellen. Er de like summerer du disse. Dette vil vel føre til at du får med tallene for mange ganger.

Jeg tror jeg ville ha løpt gjennom hele listen og lett etter ett spesifikt tall, og finner jeg noen som er like ville jeg ha lagt det til summen for det spesifikke tallet. (i hashmap-en)

Eller kan dette løses fint med rekrusjon, men du er kanskje ikke der?

Mvh
Tobias



Redigert av tobiast; 27/02/2015 19:12.
Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928646 27/02/2015 19:11
Registrert: May 2009
Innlegg: 9,144
F
fredriks Offline
Søk hjelp!
Offline
Søk hjelp!
F
Registrert: May 2009
Innlegg: 9,144
Du har missat att ha en variabel som innehåller den totala summan

sum= tallRekke[i]+tallRekke[i+1];

ska väl vara något som
sum= sum+tallRekke[i+1];

med ett sum=0 innan for lopen.

Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928652 27/02/2015 19:20
Registrert: Sep 2003
Innlegg: 1,724
tobiast Offline
Ivrig
Offline
Ivrig
Registrert: Sep 2003
Innlegg: 1,724
Ok - så du skal summere alle tallene som det er et to eller flere av i tabellen?

eks:

1,
1,
3,
3,
4

Skal gi summen 8? Jeg trodde først at du skulle ha en sum pr tall.

Mvh
Tobias

Redigert av tobiast; 27/02/2015 19:37.
Re: Legge sammen tall i en tabell i java [Re: fredriks] #1928654 27/02/2015 19:24
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655

Sitat: fredriks
Du har missat att ha en variabel som innehåller den totala summan

sum= tallRekke[i]+tallRekke[i+1];

ska väl vara något som
sum= sum+tallRekke[i+1];

med ett sum=0 innan for lopen.

Jeg har prøvd det også fredriks, den bare alle tallene summerer tabellen


Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928655 27/02/2015 19:25
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Nei du hadde rett første gang tobiast
1
1 skal gi 2
3
3 skal gi to osv


Re: Legge sammen tall i en tabell i java [Re: tobiast] #1928656 27/02/2015 19:28
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Sitat: tobiast


Jeg tror jeg ville ha løpt gjennom hele listen og lett etter ett spesifikt tall, og finner jeg noen som er like ville jeg ha lagt det til summen for det spesifikke tallet. (i hashmap-en)



Mvh
Tobias


Kan man bruke Arrays.binary.search her ?


Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928663 27/02/2015 19:40
Registrert: May 2009
Innlegg: 9,144
F
fredriks Offline
Søk hjelp!
Offline
Søk hjelp!
F
Registrert: May 2009
Innlegg: 9,144
Sitat: Morteen
Nei du hadde rett første gang tobiast
1
1 skal gi 2
3
3 skal gi to osv


Nu förstår jag inte oppgaven.

Vad ska resultatet i detalj bli för fölgande tal?
1
3
3
4
5
5
8

Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928665 27/02/2015 19:43
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
1 gir 1
3
3 gir 2
4 gir 1
5
5 gir 2
8 gir 1


Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928666 27/02/2015 19:43
Registrert: Sep 2003
Innlegg: 1,724
tobiast Offline
Ivrig
Offline
Ivrig
Registrert: Sep 2003
Innlegg: 1,724
Du kan bruke Collections.frequency()

-Tobias

Re: Legge sammen tall i en tabell i java [Re: tobiast] #1928667 27/02/2015 19:46
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Sitat: tobiast
Du kan bruke Collections.frequency()

-Tobias

Vi har ikke kommet så langt,så det går ikke
Men hvorfor virker ikke If setningen IF ( Tabell [ i ] == Tabell [i+1] eller en versjon med equals ?

Redigert av Morteen; 27/02/2015 19:52.

Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928669 27/02/2015 19:51
Registrert: Sep 2003
Innlegg: 1,724
tobiast Offline
Ivrig
Offline
Ivrig
Registrert: Sep 2003
Innlegg: 1,724
Ah - ok :-)
Her er i alle fall et forslag: https://gist.github.com/tobiast/ebda34bcf77a7d57fe42

Men da får man vel gjøre det manuelt da.... Det er jo egentlig bare å starte på toppen og ta for seg ett og ett tall. For hvert tall sjekker du om du har sett det før ved å sjekke mapen.

Edit: Her er et forslag:
https://gist.github.com/tobiast/a88dac6ae29bb44be7a0

Redigert av tobiast; 27/02/2015 20:08.
Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928675 27/02/2015 19:58
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Det forslaget lå laaangt over mitt nivå ha ha

Får prøve litt forskjellige løkker.
Skal du sykle ritt i Telemark, så si fra Stiller som hjelperytter og kjentmann.


Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928686 27/02/2015 20:35
Registrert: Sep 2003
Innlegg: 1,724
tobiast Offline
Ivrig
Offline
Ivrig
Registrert: Sep 2003
Innlegg: 1,724
Jeg redigerte posten over. Nå er det også et forslag som løser det uten collections. Jeg la også inn noen kommentarer.

Kort fortalt:
Du bruker en Map for å holde styr på hvor mange instanser av tallet du har. En map er en liste av nøkkel/verdi-par. Altså (unik) nøkel og en tilhørende verdi. I vårt tilfelle er nøkkelen tallet du ønsker å finne antall instanser av, og verdien antall ganger du har sett tallet.

Det første du gjør er å løpe gjennom listen med tall. For hvert tall sjekker du om det finner en nøkkel som er lik tallet du er på nå. I så tilfelle har du sett tallet tidligere og du henter ut verdien (antall ganger du har sett det tidligere) og legger til 1.

Hvis tallet ikke er brukt som nøkkel i mapen, vet du at det er første gang du har sett tallet og det er bare å legge inn tallet som nøkkel med verdi = 1. (Du har sett tallet en gang)

Når du er gjennom listen har du talt alle instanser.

Det er mye mer elegante måter å gjøre dette på, men løsningen over er ganske grei å forstå.


-Tobias





Redigert av tobiast; 27/02/2015 21:04.
Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928703 27/02/2015 21:07
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Jeg kan ikke løse denne oppgaven med MAP. men det likner på en løsning med jeg har sett, med å bruke en tabell til.
Jeg skjønte den ikke helt, men man la inn verdiene i den opprinnlige tabellen som indeks i den nye og telte indeks nr med den verdien eller noe sånt.


Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928710 27/02/2015 21:30
Registrert: Sep 2003
Innlegg: 1,724
tobiast Offline
Ivrig
Offline
Ivrig
Registrert: Sep 2003
Innlegg: 1,724
Ja, hvis du bruker tallet som index i en annen array, har du jo litt av funksjonaliteten til et map, nemlig det å enkelt finne fram til en verdi basert på en nøkkel.

Noe slikt: https://gist.github.com/tobiast/aad1e57e603ba7073c4f

Denne løsningen krever at du vet noe om hvilke tall du har i listen din. Du må jo ha en array som er like lang som det største tallet+1, iom at du bruker tallene som index i arrayen.

Mvh
Tobias


Redigert av tobiast; 27/02/2015 21:43.
Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928721 27/02/2015 22:10
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Hm ja det ligner faktisk på det jeg sitter å knoter med (uten å få det til ).

Redigert av Morteen; 27/02/2015 22:10.

Re: Legge sammen tall i en tabell i java [Re: Morteen] #1928724 27/02/2015 22:18
Registrert: May 2009
Innlegg: 9,144
F
fredriks Offline
Søk hjelp!
Offline
Søk hjelp!
F
Registrert: May 2009
Innlegg: 9,144
Det första du måste bestämma dig för i en sådan oppgave är hur du ska presentera lösningen. Om du kommer på det så borde det inte vara så vansklig att få till.

Jag kan inte java men om jag skulle göra det i matlab/scilab så skulle jag användt meg av en nx2 matris där första columnen är talet och andra columnen är hur många gånger det förekommer. Lätt att laga en sådan matris med en for loop.

Att ha talet som indexen i en vektor är ju också en lösning som är rätt lik den över men man får en onödigt stor vektor.

Re: Legge sammen tall i en tabell i java [Re: fredriks] #1928728 27/02/2015 22:28
Registrert: Sep 2003
Innlegg: 1,724
tobiast Offline
Ivrig
Offline
Ivrig
Registrert: Sep 2003
Innlegg: 1,724
Sitat: fredriks
...

Jag kan inte java men om jag skulle göra det i matlab/scilab så skulle jag användt meg av en nx2 matris där första columnen är talet och andra columnen är hur många gånger det förekommer. Lätt att laga en sådan matris med en for loop.


Ja, men da må du søke gjennom matrisen for å finne nøkkelen. Det gjør jo implementasjonene av map og array også, men sikkert mer effektivt enn vi klarer.


Sitat: fredriks

Att ha talet som indexen i en vektor är ju också en lösning som är rätt lik den över men man får en onödigt stor vektor.


Ja, men det er jo avhengig av hvor stor spredningen på tallene er. Har du en 1000 instanser av 1 og 1000 instanser av 10^23 er den løsningen ikke spess god. Har du tall jevnt fordelt mellom 1 og 10 er det ikke noe stress :-)

Redigert av tobiast; 27/02/2015 22:29.

Moderator  support 

Terrengsykkel utgis av Fri Flyt AS | Postboks 4767 Nydalen, 0421 Oslo | Tlf: 22 04 46 00
Ansvarlig redaktør: Erlend Sande | Redaktør: Kristoffer Kippernes Utstyrsredaktør: Øyvind Aas
Salg og marked: Alexander Hagen | Daglig leder: Audun Holmøy Røhrt
Nettsiden er utviklet av Fri Flyt Byrå