簡體   English   中英

模型視圖視圖控制器C#

[英]model view view controller 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();
    }
}

您正在讀取輸入兩次。 首先在CheckNumberController.Go()

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

其次是CheckNumber.Number()

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

后者應為:

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

當您想使用已經讀取和設置的值時,無需再進行其他操作

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

當調用GetString()方法時,您再次嘗試獲取輸入。 只需注釋並返回字符串即可。

關鍵在於這種方法:

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) ,您將在CheckNumber類上調用Number()方法,該方法將忽略存儲的變量並再次從控制台讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM