TGL Skrevet 11. april 2010 Del Skrevet 11. april 2010 (endret) Hei. Dette er mest sannsynlig en liten feil eller noe jeg har gjort galt. Jeg har strevet i flere timer for å finne ut av det, men jeg er helt stuck. Særlig god i C# er jeg heller ikke. Hadde håpet noen av dere kunne ta en rask sjekk i koden for å se om du finner årsaken til at metodene ikke returnerer den endrede verdien (variabelen "feil" skal altså øke med 1 hver gang det gjøres feil). using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { int feil; int bruker; protected void Page_Load(object sender, EventArgs e) { } public void riktigsvar(int feil) { lbl2.Text = "Gratulerer, du har svart riktig. Du brukte " + feil + " forsøk."; } public int valgtverdi1(int feil) { int riktig = 14; double feilmargin = riktig * 0.1; int.TryParse(txt1.Text, out bruker); if (bruker < riktig + feilmargin && bruker > riktig - feilmargin) { riktigsvar(feil); return feil; } else { feil = feil + 1; lbl1.Text += "-"; return feil; } } public void btn1_Click(object sender, EventArgs e) { if (int.TryParse(txt1.Text, out bruker) == false) { lbl2.Text = "Ugyldig verdi. Prøv igjen."; } else { if (rbl1.SelectedValue == "1") { valgtverdi1(feil); } Tusen hjertelig takk for hjelp! Endret 11. april 2010 av TGL Lenke til kommentar
MailMan13 Skrevet 11. april 2010 Del Skrevet 11. april 2010 Du roter fælt med scopet til variabelen din her. I funksjonen valgtverdi1 har du deklarert "feil" på nytt som et argument, og det vil overskygge member-variablenen "feil" slik at den aldri tilordnet. Ta bort argumentet til funksjon, så vil den tilordne riktig "feil". Lenke til kommentar
TGL Skrevet 11. april 2010 Forfatter Del Skrevet 11. april 2010 Har nok rotet meg fælt inn i noe tullball, ja. Hva mener du med "ta bort argumentet til funksjon"? Kunne du ha vist raskt hva det er jeg må gjøre? Lenke til kommentar
MailMan13 Skrevet 11. april 2010 Del Skrevet 11. april 2010 Du deklarerer "feil" flere ganger, èn gang som medlem i klassen din og èn gang som argument til funksjonene dine. Når så du referer til den med navn vil du alltid referere den innerste deklarasjonen. Dvs at funksjonene dine vil manipulere sitt private argument som heter "feil", og ikke medlemmet "feil" som det ser ut som du prøver på. Hvis du fjerner argumentet til funksjonene dine vil alle "feil" referere til samme variabel, slik at koden gjør det du prøver å gjøre. Lenke til kommentar
TGL Skrevet 11. april 2010 Forfatter Del Skrevet 11. april 2010 Takk for hjelp, men hva gjør jeg rent direkte når jeg skal fjerne argumentet til funksjonene? Lenke til kommentar
MailMan13 Skrevet 11. april 2010 Del Skrevet 11. april 2010 Du tar det bort... Siden du aldri bruker returverdien til noe ville jeg tatt bort den også, da blir signaturen slik: public void valgtverdi1() { ... } public void riktigsvar() { ... } Lenke til kommentar
TGL Skrevet 11. april 2010 Forfatter Del Skrevet 11. april 2010 Returverdien skal jo brukes når bruker svarer rett etter at han har svart feil x antall ganger. Derav if-setningen if (bruker < riktig + feilmargin && bruker > riktig - feilmargin) Lenke til kommentar
TGL Skrevet 11. april 2010 Forfatter Del Skrevet 11. april 2010 For de som lurte er dette altså et program der bruker skriver inn et tall i en tekstboks, og om det svares feil skal det telles hvor mange ganger bruker skriver feil, og når bruker til slutt skriver inn riktig tall skal det skrives hvor mange feil bruker har gjort. Lenke til kommentar
Gråskjegg Skrevet 11. april 2010 Del Skrevet 11. april 2010 For de som lurte er dette altså et program der bruker skriver inn et tall i en tekstboks, og om det svares feil skal det telles hvor mange ganger bruker skriver feil, og når bruker til slutt skriver inn riktig tall skal det skrives hvor mange feil bruker har gjort. Om jeg har forstått riktig, så ligger problemet med at dette er en webløsning - med de problemer og fordeler som det medfører. I dette tilfellet husker ikke serveren verdien på feil-variabelen mellom hvert forsøk. Verdien på denne må legges inn på siden, og leses igjen for hvert forsøk. Eventuelt kan cookies brukes. Men la oss gjøre det enkelt. Legg på en Label på sida, kall den "antallForsøkLabel," og sett/les verdien på denne i koden. I Page_Load: if (!IsPostBack) antallForsøkLabel.Text = "0"; I btn_click: int temp; if (int.TryParse(antallForsøkLabel.Text, out temp)) feil = temp; ..og etter og ha økt feil med en, bør du også oppdatere GUIen antallForsøkLabel.Text = feil.ToString(); Som sagt finnes det nok av andre og bedre måter. Lenke til kommentar
TGL Skrevet 11. april 2010 Forfatter Del Skrevet 11. april 2010 Det funket kjempebra. Tusen takk for hjelp! 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å