我在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();
}
}
答案 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
方法,该方法忽略存储的变量并再次从控制台读取。