hoyre Skrevet 23. desember 2011 Del Skrevet 23. desember 2011 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
NikkaYoichi Skrevet 23. desember 2011 Del Skrevet 23. desember 2011 Hva med å legge til et else-uttrykk? Lenke til kommentar
fenele Skrevet 23. desember 2011 Del Skrevet 23. desember 2011 (endret) 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 23. desember 2011 av LNF Lenke til kommentar
srbz Skrevet 24. desember 2011 Del Skrevet 24. desember 2011 (endret) 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 24. desember 2011 av srbz 1 Lenke til kommentar
hoyre Skrevet 24. desember 2011 Forfatter Del Skrevet 24. desember 2011 Hva med å legge til et else-uttrykk? Nettopp dette prøvde jeg også etter if-testen, men da fikk jeg samme problem som med labMeldingen utenfor for-løkken. Skjønner ikke hvorfor!!! Lenke til kommentar
Araho Skrevet 24. desember 2011 Del Skrevet 24. desember 2011 (endret) 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 Endret 24. desember 2011 av Araho Lenke til kommentar
hoyre Skrevet 24. desember 2011 Forfatter Del Skrevet 24. desember 2011 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
Araho Skrevet 24. desember 2011 Del Skrevet 24. desember 2011 Innrykk, på godt norsk. En tagg i innlegget som fører til at teksten blir slik Lenke til kommentar
hoyre Skrevet 24. desember 2011 Forfatter Del Skrevet 24. desember 2011 Den koden er akkurat slik jeg har prøvd tidligere, og den fungerer ikke, altså med en else-kommando inne i for-løkken. Prøvde også ut denne over, og den gikk heller ikke. Lenke til kommentar
Araho Skrevet 24. desember 2011 Del Skrevet 24. desember 2011 (endret) 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 24. desember 2011 av Araho Lenke til kommentar
hoyre Skrevet 24. desember 2011 Forfatter Del Skrevet 24. desember 2011 (endret) 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? Endret 24. desember 2011 av hoyre Lenke til kommentar
Araho Skrevet 24. desember 2011 Del Skrevet 24. desember 2011 Problemet ditt da blir at hver gang tallet IKKE stemmer, vil du sette variabelen til false. Så med mindre tallet er sist i arrayet, vil du skrive over true og legge inn false etterpå ;p Lenke til kommentar
srbz Skrevet 25. desember 2011 Del Skrevet 25. desember 2011 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
GeirGrusom Skrevet 25. desember 2011 Del Skrevet 25. desember 2011 tall.Contains(tallInn); 1 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå