2016-07-26 24 views
1

我做了一個自定義的方法來打印行,然後讀取用戶輸入其分配給雙精度變量 這裏是我的代碼:自定義方法和分配值變量 - C#

double result = 0; 
double a, b; 
while (true) 
      { 


       if (Double.TryParse(GetValue("Enter value for a "), out a) 
        && Double.TryParse(GetValue("Enter value for b "), out b)) 
       { 
        result = a + b; 
        break; 
       } 
       else 
       { 
        Console.WriteLine("invalid value please try again.."); 
        continue; 
       } 
} 
     public static double GetValue(string input) 
     { 
      double z1; 
      double value; 

       Console.WriteLine(input); 
       value = Console.ReadLine(); 
       z1 = value; 
       return z1; 
      } 

,但我面臨一個錯誤,那就是我無法將'double'轉換爲'string' 。有人可以解釋做錯了什麼嗎?

+0

您需要解析控制檯輸入。這是一個字符串,你想要一個雙。 Double.TryParse –

回答

5

的問題是在該行

value = Console.ReadLine(); 

但你可能已經知道了。 ReadLine返回一個字符串。

最簡單的解決將是從的GetValue返回一個字符串,既然你已經嘗試分析它的功能之外:

public static string GetValue(string input) 
{ 
    Console.WriteLine(input); 
    return Console.ReadLine(); 
} 

但是,一個可以說是清潔的解決辦法是解決它在詢問功能輸入並從那裏返回雙:

double result; 
double a, b; 

a = GetValue("Enter value for a "); 
b = GetValue("Enter value for b "); 
result = a + b; 

public static double GetValue(string input) 
{ 
    double value; 
    Console.WriteLine(input); 

    while (!Double.TryParse(Console.ReadLine(), out value)) 
    { 
     Console.WriteLine("invalid value please try again.."); 
    } 

    return value; 
} 

的原因,我認爲這是稍微好一點,是因爲你隔離解析成函數的邏輯,所以你只需要一個呼叫double.TryParse。而且,如果有人會爲b輸入一個不正確的值,那麼在你的代碼中,他們需要重新開始a的值,在我的代碼中,他們只需要重試b。

+0

非常感謝,那太好了 – Skoochapp