[英]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.