我有两个关于C#的问题

时间:2015-10-03 05:30:36

标签: c#

在我的SubmitButton_Click方法中,我正在尝试添加代码,以便为每个正确答案将分数提高20分。但由于某种原因,每次我正确地回答问题时它不会增加20分,它会说0.我的另一个问题是,当我点击新的时候我的两个随机变量发生了变化,我输入了正确的答案,它标记为不正确。我是否在处理这两个问题?

这是我的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Lab4
{
    public partial class Lab4 : Form
    {
        public Lab4()
        {
            InitializeComponent();
            score = 0;

        }

        private int score = 0;
        private int product = 0;
        private int answer = 0;


        private void SubmitButton_Click(object sender, EventArgs e)
        {

            try
            {
                answer = int.Parse(AnswerTextBox.Text);
                if(Convert.ToInt32(AnswerTextBox.Text)==product)

                {

                    score=score+20;
                    MessageBox.Show("Correct!");                   
                }
                else
                {
                    MessageBox.Show("Sorry, your answer is incorrect!");
                }

            }
            catch
            {
                MessageBox.Show("There was an error processing your answer!");
            }

        }



        private void NewButton_Click(object sender, EventArgs e)
        {
             Random rnd = new Random();
            int i, var1, var2, product;
            var1 = rnd.Next(1,9);
            var2 = rnd.Next(1,9);
            PromptLabel.Text = ("WHAT IS " + var1 +" . " + var2 + "?");
            product = var1 * var2;
            for (i = 10; i >= 1; i--)
            {
                MessageBox.Show("You have " + i + " sec(s) left!");
                TimeLabel.Text = ("Time: " + i + " sec(s)");

            }
        }

        private void ScoreLabel_Click(object sender, EventArgs e)
        {

        }

        private void AnswerTextBox_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

2 个答案:

答案 0 :(得分:1)

第一个问题是您在方法中声明了一个局部变量,其名称与表单类中的字段相同。它们都被命名为product。因此局部变量隐藏了字段,因此没有为您的班级中的product分配值。所以你必须删除本地的,或者必须使用this关键字告诉编译器使用类中的字段。

你不必在这里声明product,因为你不需要它。

int i, var1, var2; //product; dont declare local variable. instead use the field which is already available
var1 = rnd.Next(1,9);
var2 = rnd.Next(1,9);
PromptLabel.Text = ("WHAT IS " + var1 +" . " + var2 + "?");
product = var1 * var2; // this.product = var1 * var2;

我看到的另一个问题是计时器。你的计时器内循环几乎立即完成。因为你不要等到秒倒计时器。

for (i = 10; i >= 1; i--)
{
    MessageBox.Show("You have " + i + " sec(s) left!");
    TimeLabel.Text = ("Time: " + i + " sec(s)");
    await Task.Delay(1000); // wait 1 second
}

为此,您必须将方法的签名更改为异步。

private async void NewButton_Click(object sender, EventArgs e)

这可能被认为是做倒数计时器的糟糕设计。所以我强烈建议你看看这里知道如何正确创建倒数计时器。

https://msdn.microsoft.com/en-us/library/dd492144.aspx

答案 1 :(得分:0)

更改此行

int i, var1, var2, product;

int i, var1, var2;

它应该解决问题