Gå til innhold

C#: Ørlite problem med returverdier i metoder


Anbefalte innlegg

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 av TGL
Lenke til kommentar
Videoannonse
Annonse

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

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

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

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

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...