Gå til innhold

Anbefalte innlegg

Hei!

I en opg skal en bruker kunne skrive inn et tall i en tekstboks, for så å få svar om tallet finnes i arrayen. Jeg har laget en kode, som er slik at brukeren får svar om tallet er i arrayen, men det kommer ikke noe svar om det ikke finnes.

 

int[] tall = { 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 13, 45, 12, 1, 2, 3, 45, 5, 6, 6, 7, 778, 889, 99};

int tallInn = Convert.ToInt32(txtTall.Text);

 

for (int verdi = 0; verdi < tall.Length; verdi++)

{

if (tallInn == (tall[verdi]))

labMelding.Text = "Tallet " + tallInn + " finnes i arrayen";

}

 

Spørsmålet er da hvordan brukeren skal kunne få et svar hvis tallet ikke finnes. Jeg prøvde meg med en labMelding utenfor for-løkken, men da kom det et svar om at den ikke fantes hele tiden. Hvordan løses dette, og hvorfor går det ikke å bare ha en labMelding utenfor for-løkken som sier at tallet ikke finnes?

Lenke til kommentar
Videoannonse
Annonse

Else inne i for løkka som ^skriver eller isteden for å msgbox inne i for løkka kan du ha en boolean variabel som settes true hvis den finner. Så setter du en if-else setning utenfor som sjekker verdien til boolean og msgbox der.

Endret av LNF
Lenke til kommentar

LNF sitt forslag er enkelt, greit og effektivt.

boolean finnes(int[] tall, int tallInn)
{
for(int i=0; i<tall.length; i++)
{
if(tall[i] == tallInn) return true;
}
return false;
}

 

i main-metoden slenger du da inn

if(finnes(tall, tallInn)
{
// handling når tall finnes
}
else
{
// handling når tall ikke finnes, dersom dette er nødvendig å ha med
}

 

Nå har jeg skrevet i java ettersom jeg ikke kjenner C#, men koden i førsteinnlegg er definitivt også gyldig java-kode, så jeg regner med du skjønner gangen her. Løser du det på denne måten vil programmet kun søke gjennom arrayet til den finner en forekomst av tallet (altså, metoden "finnes" vil returnere true straks tall er lik tallInn, og søke-løkken stopper), eller gjennom hele arrayet dersom tallet ikke finnes. Dermed sparer du endel iterasjoner, og du får maks en "success"-utskrift, selv om tallet forekommer flere ganger i arrayet.

Endret av srbz
  • Liker 1
Lenke til kommentar

Skal du ha et if / else-uttrykk kan det lønne seg å bruke krøllklammer for å holde oversikt over hva som hører til hvor. Eksempelvis kan løsningen bli seende slik ut:

 

int[] tall = { 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 13, 45, 12, 1, 2, 3, 45, 5, 6, 6, 7, 778, 889, 99};

int tallInn = Convert.ToInt32(txtTall.Text);

 

for (int verdi = 0; verdi < tall.Length; verdi++)

{

if (tallInn == (tall[verdi])) {

labMelding.Text = "Tallet " + tallInn + " finnes i arrayet.";

}

else {

labMelding.Text = "Tallet " + tallInn + " finnes ikke i arrayet."

}

}

 

 

Når det er sagt, liker jeg LNF og srbz sitt forslag også, fordi det er gjenbrukbar kode du enkelt kan bruke andre plasser. Kanskje ikke nødvendig akkurat her, men en grei praksis å benytte seg av ;)

 

EDIT: Nå failet det tydeligvis å bruke indent-taggen inne i code-taggen, så da blir det slik i stedet. Noe å fikse, mods? I tillegg noe dumt at [/ indent] automatisk medfører linjeskift, slik det virker som det gjør. Blir mer uoversiktlig i redigeringsboksen for å få ting til å se skikkelig ut :p

Endret av Araho
Lenke til kommentar

Skal du ha et if / else-uttrykk kan det lønne seg å bruke krøllklammer for å holde oversikt over hva som hører til hvor. Eksempelvis kan løsningen bli seende slik ut:

 

int[] tall = { 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 13, 45, 12, 1, 2, 3, 45, 5, 6, 6, 7, 778, 889, 99};

int tallInn = Convert.ToInt32(txtTall.Text);

 

for (int verdi = 0; verdi < tall.Length; verdi++)

{

if (tallInn == (tall[verdi])) {

labMelding.Text = "Tallet " + tallInn + " finnes i arrayet.";

}

else {

labMelding.Text = "Tallet " + tallInn + " finnes ikke i arrayet."

}

}

 

 

Når det er sagt, liker jeg LNF og srbz sitt forslag også, fordi det er gjenbrukbar kode du enkelt kan bruke andre plasser. Kanskje ikke nødvendig akkurat her, men en grei praksis å benytte seg av ;)

 

EDIT: Nå failet det tydeligvis å bruke indent-taggen inne i code-taggen, så da blir det slik i stedet. Noe å fikse, mods?

 

Hva i alle verden er indent? Har ikke hørt om det før...

Lenke til kommentar

Ok, nytt forsøk:

 

int[] tall = { 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 13, 45, 12, 1, 2, 3, 45, 5, 6, 6, 7, 778, 889, 99};

int tallInn = Convert.ToInt32(txtTall.Text);

 

boolean exists = false; // Oppretter en boolsk (true / false) verdi, og setter den til false.

 

for (int verdi = 0; verdi < tall.Length; verdi++)

{

if (tallInn == tall[verdi] && exists != true) { // Denne sjekker for det første om tallet er likt, og i tillegg kan ikke tallet allerede ha vært funnet i arrayet.

exists = true;

}

}

 

if ( exists == true) { // Hvis innholdet i if-setninga har blitt kjørt, dvs at tallet finnes.

labMelding.Text = "Tallet " + tallInn + " finnes i arrayet."

}

else {

labMelding.Text = "Tallet finnes ikke i arrayet."

}

 

EDIT: La til noen kommentarer i koden.

Endret av Araho
Lenke til kommentar

Ok, nytt forsøk:

 

int[] tall = { 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 13, 45, 12, 1, 2, 3, 45, 5, 6, 6, 7, 778, 889, 99};

int tallInn = Convert.ToInt32(txtTall.Text);

 

boolean exists = false; // Oppretter en boolsk (true / false) verdi, og setter den til false.

 

for (int verdi = 0; verdi < tall.Length; verdi++)

{

if (tallInn == tall[verdi] && exists != true) { // Denne sjekker for det første om tallet er likt, og i tillegg kan ikke tallet allerede ha vært funnet i arrayet.

exists = true;

}

}

 

if ( exists == true) { // Hvis innholdet i if-setninga har blitt kjørt, dvs at tallet finnes.

labMelding.Text = "Tallet " + tallInn + " finnes i arrayet."

}

else {

labMelding.Text = "Tallet finnes ikke i arrayet."

}

 

EDIT: La til noen kommentarer i koden.

 

 

Nå fungerte det Araho!:) Noen forklaring på hvorfor det ikke gikk å sette else-kommandoen i for-løkken? :p

Endret av hoyre
Lenke til kommentar

Ja, nettopp. Såvidt jeg har skjønt er du kun ute etter å finne ut hvorvidt tallet eksisterer i arrayet, og da trenger du i bunn og grunn bare å søke gjennom arrayet til du finner tallet. Hvis du finner tallet trenger du ikke søke lenger, og hvis du har søkt gjennom hele arrayet uten å finne tallet eksisterer det ikke. Du kan slenge inn en break i if-blokken inni for-løkken som vil avbryte søket straks du finner tallet, noe som basically vil gjøre ca det samme som kodeeksempelet mitt tidligere.

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å
×
×
  • Opprett ny...