Gå til innhold

C#: legge sammen temperaturer i en array


Anbefalte innlegg

Hei!

 

Lurer på om noen ser feilen i denne koden, som skal finne hvor mange ganger hver temperatur forekommer ut i fra arrayen:

 

int[] veret = { -5, -3, -2, 0, 2, 3 };

int[] antall = new int[6];

 

for(int v = 0; v < veret.Length; v++)

{

antall[veret[v]]++;

 

}

for(int v = 0; v < antall.Length; v++)

{

labUlikeVerdier.Text += "Hvordan uttrykke hver enkelt temperatur?" + " grader forekom " + antall[v] + " ganger.";

 

På forhånd hjertelig takk!:)

}

Lenke til kommentar
Videoannonse
Annonse

Fordi du har negative verdier du prøver å bruke som index.

 

Enten må du gjøre plass til negative verdier (f.eks øke "antall" arrayet og introdusere en offset), eller bruke en mer egnet datastruktur til resultatet.

 

 

Men skjønner ikke hvordan dette skal gjøres. Er ikke altfor god på arrays, da det er litt nytt. Har brukt det i kombinasjon med løkker (foreach, for og while). Kjempe om du kunne gitt et eksempel på hvordan man kan gjøre det.

Lenke til kommentar

Du har flere alternativer i den andre tråden din.

 

Når du deklarerer en array med størrelse 6 får den plass til 6 elementer med index 0-5.

 

Når du kommer første iterasjon i løkken din prøver du å indeksere i den med første element i "veret" som er -5, det er utenfor 0-5. Da får du det eneste fornuftige resultatet, et ArrayOutOfBoundsException.

 

Jeg antar dette er en skoleoppgave og du skal bruke array til å telle opp elementene? Hvis ikke ville jeg brukt en av løsningene i den andre tråden din.

 

Antar da at du må bruke et antall array og for-loop, da bør du gjøre følgende:

 

Hvis du vet at verdiområdet er -5 til 5 har du 11 mulige verdier. Da må antall ha størrelse 11. Siden minste mulige verdi er -5 må du indeksere med offset på +5 for å flytte alle verdiene dine opp, og gjøre plass til de 5 negative verdiene.

Lenke til kommentar

Du har flere alternativer i den andre tråden din.

 

Når du deklarerer en array med størrelse 6 får den plass til 6 elementer med index 0-5.

 

Når du kommer første iterasjon i løkken din prøver du å indeksere i den med første element i "veret" som er -5, det er utenfor 0-5. Da får du det eneste fornuftige resultatet, et ArrayOutOfBoundsException.

 

Jeg antar dette er en skoleoppgave og du skal bruke array til å telle opp elementene? Hvis ikke ville jeg brukt en av løsningene i den andre tråden din.

 

Antar da at du må bruke et antall array og for-loop, da bør du gjøre følgende:

 

Hvis du vet at verdiområdet er -5 til 5 har du 11 mulige verdier. Da må antall ha størrelse 11. Siden minste mulige verdi er -5 må du indeksere med offset på +5 for å flytte alle verdiene dine opp, og gjøre plass til de 5 negative verdiene.

 

Jeg forstår bare ikke hvordan det skal gjøres :( Om jeg kun endrer new int til 11 mulige verdier, så endrer ikke det noe. Har fra før bare lagt sammen ulike verdier med kun positive tall, og da har det ikke vært noe problem.

Lenke til kommentar

Arrays fungerer med en index som sier posisjon i arrayen. Indeksen er fra 0 og oppover.

 

int[] arr = new int[2]

gir deg

arr[0]

arr[1]

 

 

int[] arr = new int[6]

gir deg

arr[0]

arr[1]

arr[2]

arr[3]

arr[4]

arr[5]

 

osv.

 

Legg merke til at det KUN er positive indekser her.

Så når du i ditt eksempel prøver dette:

 

arr[-5] --> Index out of array feil

arr[-3] --> Index out of array feil

arr[-2] --> Index out of array feil

arr[0] --> OK

arr[2] --> OK

arr[3] --> OK

 

Så vil den feile på alle de negative tallene. Og alle tall som er over 5.

 

Så svaret dersom dette kun er en analyse oppgave er at du benytter indekser som er utenfor de definerte for arrayen.

 

Dersom du skal løse dette på en bedre måte ville jeg benyttet Dictionary<int,int>()

 

           int[] veret = { -5, -3, -2, 0, 2, 3 };
           var antall = new Dictionary<int, int>();

           for (int v = 0; v < veret.Length; v++) {
               if (!antall.ContainsKey(veret[v])) antall.Add(veret[v], 1); //første forekomst
               else antall[veret[v]]++;
           }
           foreach (var ver in antall) {
               labUlikeVerdier.Text += "Hvordan uttrykke hver enkelt temperatur?" + ver.Key + " grader forekom " + ver.Value + " ganger.";
           }

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...