從程序背景來看,我在設計基於菜單的控制檯應用程序和用戶輸入驗證時運行到概念塊。我的目標是顯示一個啓動其他進程的菜單。我想在菜單上將用戶輸入限制爲1,2或3。我需要一個簡單和優雅的用戶驗證技術的c#控制檯應用程序
在程序語言,我會做這樣的事僞代碼:
10 print "Make a choice"
20 choice = [dataFromKeyboard]
30 if choice < 4 && choice > 0
40 then 10
50 else 60
60 process valid choices
不管我怎麼努力,我不能讓這出我的頭在設計OO程序。考慮(簡化爲只包括3個菜單項):
class Menu
{
public static void Main(String[] args)
{
DisplayMenu thisdm = new DisplayMenu;
int menuChoice = thisdm.displayMenu();
ProcessMenu thispm = new ProcessMenu();
thispm.processMenu(menuChoice);
}
}
class DisplayMenu
{
public int displayMenu()
{
Console.WriteLine("1 - foo3");
Console.WriteLine("2 - foo2");
Console.WriteLine("3 - foo3");
Console.WriteLine("choose");
String choice = Console.ReadLine();
int intChoice = Convert.ToInt32(choice);
return intChoice;
}
}
class ProcessMenu
{
public void processMenu(int choice)
{
switch(choice)
{
case 1:
foo1();
break;
case 2:
foo2();
break;
case 3:
foo3();;
break;
default:
Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
break;
}
}
}
所以這裏是我卡住的地方。我無法用一種簡單而優雅的方式來包裝我的頭,以驗證我的用戶輸入來自OO而不是程序立場。
假設我在DisplayMenu
中進行驗證,我將在輸入讀取後進行驗證。但如果事實證明無效,我如何重新詢問有效的輸入,因爲我已經從Main
調用了displayMenu
方法?
我一直在玩while
循環了大約一個小時,這樣的事情:
intChoice = 0;
[print the menu]
while ((intChoice<1) || (intChoice>3))
Console.WriteLine("Please make a valid choice from the menu");
choice = Console.ReadLine();
etc.
,但似乎無法找到甜蜜點,我可以控制用戶輸入。
我懷疑這是因爲我想要程序化,而不是面向對象。任何人有任何提示或意見,以幫助我包圍我的頭?
考慮將您的班級轉爲90度,並使用{Display/Process/Status}而不是ProcessMenu/DisplayMenu類將班級分爲'MenuItem'。 –