rekenhulp geeft antwoord al van tevoren

Status
Niet open voor verdere reacties.

andriesf

Gebruiker
Lid geworden
16 aug 2008
Berichten
216
hallo allemaal,

vanmiddag in een heel snel tempo een beetje aan de slag gegaan met C#. Helaas kom ik na veel zoeken nog niet uit een aantal dingen.

Ik ben dus als oefenprogrammaatje een rekenhulp aan het maken, die random 2 getallen pakt. Jij kunt dan kiezen deze op te tellen, af te trekken, te vermenigvuldigen of te delen door middel van een combobox.
Nu kun je daarna eronder in een textbox een getal invoeren, waarna je op Controleer kunt klikken om het antwoord te controleren. Als je op Controleer klikt toont hij de nieuwe som.

Hierna moet hij dus een melding weergeven. Als het antwoord goed is geeft hij je een complimentje. Als je het antwoord niet goed hebt geeft hij het goede antwoord.

Hier gaat dus het volgende fout:
Hij toont altijd het antwoord, omdat hij het antwoord toont van de som die je dan moet maken.

mijn code is de volgende: (misschien niet echt geweldig, maar ben nog maar 3 uurtjes met C-Sharp bezig)
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int getal1;
        int getal2;
        Random number = new Random();

        public Form1()
        {
            InitializeComponent();           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button1_Click(button1, EventArgs.Empty);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            getal1 = number.Next(50, 150);
            getal2 = number.Next(0, 74);
            label1.Text = Convert.ToString(getal1);
            label3.Text = Convert.ToString(getal2);
            string text1 = textBox1.Text;
            
            if (text1 == "")
            {
                label5.Text = "U heeft niets ingevuld!";
            }
            else
            {
                int antwoord = getal1 + getal2;
                int test = Convert.ToInt16(text1);
                if (antwoord == test)
                {
                    label5.Text = "Dit was het juiste antwoord";
                }
                else
                {
                    label5.Text = Convert.ToString(antwoord);
                }
            }

        }
    }
}

ps. het deel met de combobox werkt nog niet hij doet nu altijd de 2 getallen optellen.


Alvast bedankt,

Andries
 
kan je alles zippen en sturen?
 
Logisch dat dit niet werk jij laat u button eerst loaden voor er op gedrukt is. Waardoor de waarde van getal1 en getal2 veranderen als je op de button klikt.. U code klopte helemaal alleen je mag die button niet laten loaden als het form load. Is toch logisch? ;-)..

Tip: Gebruik de debugger, dan had je dit vanzelf gezien!
Tip: Gebruik logische namen dus niet label5, label4, textbox1..

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int getal1;
        int getal2;
        Random number = new Random();

        public Form1()
        {
            InitializeComponent();           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            getal1 = number.Next(50, 150);
            getal2 = number.Next(0, 74);

            label1.Text = Convert.ToString(getal1);
            label3.Text = Convert.ToString(getal2);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string text1 = textBox1.Text;
            
            if (text1 == "")
            {
                label5.Text = "U heeft niets ingevuld!";
            }
            else
            {
                int antwoord = getal1 + getal2;
                int test = Convert.ToInt16(text1);
                if (antwoord == test)
                {
                    label5.Text = "Dit was het juiste antwoord";
                }
                else
                {
                    label5.Text = Convert.ToString(antwoord);
                }
            }

        }
    }
}
 
Tip: Gebruik de debugger, dan had je dit vanzelf gezien!

De debugger zegt hier bij mij niets van ;)

Maar met jouw code maakt hij dus niet steeds een nieuwe som als je een som hebt gehad, en dat was op mijn manier wel het geval...
 
De debugger zegt hier bij mij niets van ;)

Maar met jouw code maakt hij dus niet steeds een nieuwe som als je een som hebt gehad, en dat was op mijn manier wel het geval...

Ik bedoel, werk met breakpoints dan kan je kijken wat er allemaal in de variable zit (beneden bij locals).


Maar met jouw code maakt hij dus niet steeds een nieuwe som als je een som hebt gehad, en dat was op mijn manier wel het geval... Wat bedoel je hiermee? Is toch goed zo? Niet?
 
Maar met jouw code maakt hij dus niet steeds een nieuwe som als je een som hebt gehad, en dat was op mijn manier wel het geval... Wat bedoel je hiermee? Is toch goed zo? Niet?

Jouw code werkt inderdaad wel, maar mijn bedoeling met het programmaatje was het volgende:
Je maakt een som, controleert hem en dan wordt er een volgende som getoond.

Dat bovenstaande is met jouw code niet het geval :(
 
Jouw code werkt inderdaad wel, maar mijn bedoeling met het programmaatje was het volgende:
Je maakt een som, controleert hem en dan wordt er een volgende som getoond.

Dat bovenstaande is met jouw code niet het geval :(
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int getal1;
        int getal2;
        Random number = new Random();

        public Form1()
        {
            InitializeComponent();           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            getallen();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string text1 = textBox1.Text;
            
            if (text1 == "")
            {
                label5.Text = "U heeft niets ingevuld!";
            }
            else
            {
                int antwoord = getal1 + getal2;
                int test = Convert.ToInt16(text1);
                if (antwoord == test)
                {
                    label5.Text = "Dit was het juiste antwoord";
                    getallen();
                }
                else
                {
                    label5.Text = Convert.ToString(antwoord);
                    getallen();
                }
            }
    
        }
        private void getallen()
            {
            getal1 = number.Next(50, 150);
            getal2 = number.Next(0, 74);

            label1.Text = Convert.ToString(getal1);
            label3.Text = Convert.ToString(getal2);
            }
    }
}
probeer dit eens? Heb wel hier zo ff getypt en niet getest op errors. Volgens mij moet het wel lukken!
 
Bedankt, dit werkt in ieder geval, zal morgen even kijken of ik de code ook begrijp en of het me ook zelf lukt. Want daar gaat het uiteindelijk om.
 
Bedankt, dit werkt in ieder geval, zal morgen even kijken of ik de code ook begrijp en of het me ook zelf lukt. Want daar gaat het uiteindelijk om.

Eigelijk is het heel simpel ze, je moet uzelf de vraag stellen: Wanneer moeten daar nieuwe getallen komen te staan?

Antwoord:
- als het form load
- als ik een fout antwoord geef
- als ik een juist antwoord geef

Ik heb hiervoor een methode gemaakt getallen(); je kan het ook perfect zonder methode doen maar dan zit je met zoveel keer dezelfde code. Overal waar getallen(); staat kan je dit ook zetten.
Code:
            getal1 = number.Next(50, 150);
            getal2 = number.Next(0, 74);

            label1.Text = Convert.ToString(getal1);
            label3.Text = Convert.ToString(getal2);

Je snapt waarschijnlijk wel dat met een methode werken veel efficiënter is dan zoals hierboven te werk gaan.
 
_

zal ook eens proberen te maken. ik heb al altijd 2 random getallen opgeteld maar niet dat ik het getal moet zelf gaan in geven.
 
het is klaar misschien is het dat dat je wilt bedoelen.


Random rnd = new Random();
int antwoord = 0;
int getal1 = 0;
int getal2 = 0;
int getal3 = 0;
int getal4 = 0;
int mijngetal = 0;

public Form1()
{
InitializeComponent();
}

private void btnGetallengeven_Click(object sender, EventArgs e)
{
getal1 = rnd.Next(100);
getal2 = rnd.Next(100);

txtGetal1.Text = getal1.ToString();
txtGetal2.Text = getal2.ToString();
}
private void Controleren_Click(object sender, EventArgs e)
{ getal3 = int.Parse(txtGetal1.Text);
getal4 =int.Parse(txtGetal2.Text);

mijngetal = int.Parse(txtAntwoord.Text);

antwoord = getal3+getal4;

if (antwoord == mijngetal)
txtJuistoffout.Text = "juist, je kan rekenen".ToString();
else if (antwoord != mijngetal)
txtJuistoffout.Text = "fout,je kan dat gewoon niet. Het getal is"+ antwoord.ToString();
}
}
}
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan