模型视图视图控制器C#

时间:2015-07-31 08:50:28

标签: c#

我在c#中编写一个简单的程序,要求用户输入一个数字,然后告诉用户该数字是奇数还是偶数。我的程序工作,但是当我第一次输入数字没有任何反应时,我必须输入两次数字然后它告诉我数字是奇数还是偶数,我不是很擅长使用mvvc技术,所以如果有人知道为什么会发生这种情况并且可以帮助我,这将是伟大的。我的代码在下面......

class CheckNumber
{
    protected String number;
    public void SetNumber(String newNumber)
    {
        number = newNumber;

    }
    public int Number()
    {
        int number = Convert.ToInt32(Console.ReadLine());

        if (number % 2 == 1)                                //(number % 2 == 0) would test for even numbers(0 remainder)
        {
            Console.WriteLine("Odd number");
        }

        else
        {
            Console.WriteLine("Even number");
        }

        return number;
    }

}


 class CheckNumberController
{
    IView view;
    CheckNumber checkNumber;
    public CheckNumberController(IView theView, CheckNumber theCheckMark)
    {
        view = theView;
        checkNumber = theCheckMark;
    }
    public void Go()
    {
        view.Start();
        checkNumber.SetNumber(view.GetString("Please enter a number"));
        view.Show(checkNumber.Number());
        view.Stop();
    }

}


 class ConsoleView : IView
{
    public void Start()
    {
        Console.Clear();
    }
    public void Stop()
    {
        Console.WriteLine("Press any key to finish");
        Console.ReadKey();
    }
    public String GetString(String prompt = "")
    {
        Console.WriteLine(prompt);
        return Console.ReadLine();
    }
    public Int32 GetInt(String prompt = "")
    {
        Console.WriteLine(prompt);
        return Int32.Parse(Console.ReadLine());
    }
    public void Show<T>(T message)
    {
        Console.WriteLine(message);
    }

}


interface IView
{
    void Start();
    void Stop();
    String GetString(String prompt);
    Int32 GetInt(String prompt);
    void Show<T>(T message);

}


class Program
{
    static void Main(string[] args)
    {

        new CheckNumberController(new ConsoleView(), new CheckNumber()).Go();
    }
}

3 个答案:

答案 0 :(得分:2)

您正在阅读输入两次。首先在CheckNumberController.Go()

checkNumber.SetNumber(view.GetString("Please enter a number"));

其次是CheckNumber.Number()

int number = Convert.ToInt32(Console.ReadLine());

后者应该是:

int number = Convert.ToInt32(this.number);

您想要处理已经阅读和设置的值,而不是另外一个

答案 1 :(得分:1)

public String GetString(String prompt = "")
{
    Console.WriteLine(prompt);
    //return Console.ReadLine();
    return "error is here";
}

调用GetString()方法时,再次尝试获取输入。如果需要,只需注释并返回字符串。

答案 2 :(得分:0)

关键在于这种方法:

public void Go()
{
    view.Start();
    checkNumber.SetNumber(view.GetString("Please enter a number"));
    view.Show(checkNumber.Number());
    view.Stop();
}

SetNumber(string)在CheckNumber类中设置受保护字段number。但是,当您调用view.Show<T>(T)时,您正在调用Number()类上的CheckNumber方法,该方法忽略存储的变量并再次从控制台读取。