我知道有很多方法可以解決這個問題,我知道使用 if 陳述句的“愚蠢”方法,但是我一直在嘗試使用更少的代碼,但更多地使用它。
if(ope == " ")
{
result = userInput userInput2;
Console.WriteLine(result);
}
并為所有操作員復制過去這些垃圾。
我做了一個包含所有運算子的串列,并認為我可以檢查串列,如果輸入不等于串列中的任何內容,重復,直到選擇一個運算子。(這可能會導致錯誤()如果用戶寫了 1 個以上的正確答案會發生什么,它會從串列中還是第一個中獲取更多。一個例子:如果用戶輸入 - /(甚至還沒有走到這一步呢? ),它們都在串列中。
這是我為獲取 double 而撰寫的代碼示例:示例是“while (!double.TryParse(Console.ReadLine(), out userInput));” 從代碼片段中,代碼不會采用任何字串值,并一遍又一遍地重復代碼,直到 userInput 是一個數字。
我不知道如何使用 do while 回圈來回圈代碼以檢查 userInput 是否與串列包含的值相同:數學運算子 ,-,*,/;^,% 以及用戶輸入是否為' t 正確,重復代碼直到正確。
我的問題是,如何遍歷串列,檢查輸入是否正確,挑選出正確的輸入并求解 userInput X userInput2 上的方程。用戶是否應該選擇 2 個運算子,例如 / 和 - 重復回圈。僅選擇 1 個操作員。
private static void Main(string[] args)
{
List<string> OperatorToUse = new List<string>();
OperatorToUse.Add(" ");
OperatorToUse.Add("-");
OperatorToUse.Add("/");
OperatorToUse.Add("*");
OperatorToUse.Add("%");
OperatorToUse.Add("^");
double userInput;
double userInput2;
var result;
var ope;
do
{
Console.WriteLine("Enter Your first number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput));
#If the answer is X, and user Input is also X. stop the Loop
#Not working
do
{
Console.WriteLine("Enter your Operator: ");
} while (!OperatorToUse.Contains(Console.ReadLine(), out OperatorToUse));
#Not working
do
{
Console.WriteLine("Enter your Operator: ");
} while (Console.Readline(ope) == " " || ope == "-" || ope == "/");
do
{
Console.WriteLine("Enter Your Second number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput2));
Console.WriteLine($"{result}");
}
uj5u.com熱心網友回復:
您的 while 回圈應如下所示:
do
{
Console.WriteLine("Enter your Operator: ");
ope = Console.ReadLine()?.Trim();
} while (!OperatorToUse.ContainsKey(ope));
在下面的示例中,我使用的是 Dictionary 而不是 List,但想法是相同的。
為了避免每個運算子的 if 陳述句,您應該使用字典并將每個運算子添加為鍵,將相應的數學函式添加為值。您可以像示例中那樣使用委托來執行此操作。然后,您只需使用選定的運算子從字典中檢索它來呼叫相應的函式,如下所示:
OperatorToUse[ope](userInput, userInput2)
internal class Program
{
delegate double MathOperation(double a, double b);
static void Main(string[] args)
{
Dictionary<string, MathOperation> OperatorToUse = new Dictionary<string, MathOperation>();
OperatorToUse.Add(" ", (a, b) => a b);
OperatorToUse.Add("-", (a, b) => a - b);
OperatorToUse.Add("/", (a, b) => a / b);
OperatorToUse.Add("*", (a, b) => a * b);
OperatorToUse.Add("%", (a, b) => a % b);
OperatorToUse.Add("^", Math.Pow);
double userInput;
double userInput2;
string ope = String.Empty;
do
{
Console.WriteLine("Enter Your first number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput));
do
{
Console.WriteLine("Enter your Operator: ");
ope = Console.ReadLine()?.Trim();
} while (!OperatorToUse.ContainsKey(ope));
do
{
Console.WriteLine("Enter Your Second number: ");
} while (!double.TryParse(Console.ReadLine(), out userInput2));
Console.WriteLine($"{OperatorToUse[ope](userInput, userInput2)}");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/342650.html
