2017-03-16 30 views
3

所以我只是試圖開始編碼一般,我試圖在C#中做一個計算器,它確實工作,但我不能輸入0.4的問題或高於9的數字,否則我的計算器給我這個錯誤: Int32的值對於大小來說可能太大或太小。我在這裏用什麼來代替int? C#CMD

我搜索了這個問題,並引導到這個網站,這裏的人們正在討論使用字符串。我試過,但它告訴我,我不能使用 - 運算符或*運算符。

對不起,即時通訊甚至問這有一個超級簡單的解決方案,但我希望有人可以回答這個問題。

class Program 
{ 
    //Ints 
    public static int value1; 
    public static int value2; 
    public static int result; 
    public string input = Console.ReadLine(); 

    static void Main(string[] args) 
    { 
     while (true) 
     { 
      Console.ForegroundColor = ConsoleColor.Green; 
      Console.WriteLine($"Choose your mathmetical operator: (A)dd (S)ubtract (M)ultiply"); 
      if (Console.ReadLine() == "A") 
      { 
       Console.WriteLine("Enter 2 values."); 
       value1 = Convert.ToInt32(Console.ReadLine()); 
       value2 = Convert.ToInt32(Console.ReadLine()); 
       Add(value1, value2); 
      } 
     } 
    } 

    static void Add(int value1, int value2) 
    { 
     result = value1 + value2; 
     Console.WriteLine($"{result}"); 
     Console.ReadLine(); 
     Console.Clear(); 
     result = 0; 
     value1 = 0; 
     value2 = 0; 
    } 

    static void Subtract(int value1, int value2) 
    { 
     result = value1 - value2; 
     Console.WriteLine($"{result}"); 
     Console.ReadLine(); 
     Console.Clear(); 
     result = 0; 
     value1 = 0; 
     value2 = 0; 
    } 

    static void Multiply(int value1, int value2) 
    { 
     result = value1 * value2; 
     Console.WriteLine($"{result}"); 
     Console.ReadLine(); 
     Console.Clear(); 
     result = 0; 
     value1 = 0; 
     value2 = 0; 
    } 
} 

}

+1

而不是'Convert.ToInt32()'使用'Int32.TryParse()'以避免出現問題時,你的輸入是不是有效'Int32'。如果你需要使用小數,不要使用int,使用double。 –

+0

如果您將數字存儲在一個字符串中,那麼根據您在學校學到的規則編寫代碼來添加,減去,除,乘。 –

+0

基本.Net類型:https://msdn.microsoft.com/en-us/library/ya5y69ds.aspx。瞭解他們是什麼,並選擇最適合您的任務 – ASh

回答

2

分析你的代碼後,所有的邏輯似乎都沒問題,但是看起來你對數據類型並不瞭解。這是你應該開始的事情,你可以閱讀關於C#的內置數據類型的文章on this page

你應該知道的另一件事是如何更改(或轉換)數據類型。在您的代碼中,您希望該用戶將遵循您的規則並正確輸入所有內容。你必須把你的最終用戶(甚至你自己)視爲一個完全愚蠢的人,他會在數字類型的字段中插入「number 6 please」。簡單的例子,詢問用戶對generic輸入類型可以是這樣的:

public static TResult AskForInput<TResult>(string message) 
{ 
    bool isValid = false; 
    while(!isValid) 
    { 
     Console.WriteLine(message); 
     string value = Console.ReadLine(); 
     try 
     { 
      TResult result = (TResult)Convert.ChangeType(value, typeof(TResult)); 
      return result; 
     } 
     catch 
     { 
      Console.WriteLine("Input does not match requested type"); 
     } 
    } 
} 

最後,但我會說,最重要的是要用戶輸入的值與預定義的小數點(.)如。 0.4。此小數點標記取決於當前的文化信息: System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator

因此,例如,您希望將此應用程序發送給您的朋友在不同國家和他們的文化中,他們使用逗號(,)十進制標記。那麼如果你想自己解析這個,你的應用程序可能會失敗。嘗試始終檢查此設置,或將其包含在您的轉換方法中。

對於你的例子,我建議使用double數據類型,因爲它是數學運算中常用的數據類型。這個組合到您的代碼看起來有點類同此:

public static void Main(string[] args) 
{ 
    //Your code goes here 
    //while (true) 
    { 
     Console.WriteLine("Choose your mathmetical operator: (A)dd (S)ubtract (M)ultiply"); 
     if (Console.ReadLine() == "A") 
     { 
      Console.WriteLine("Enter 2 values."); 
      double value1 = AskForInput<double>("Enter left value :"); 
      double value2 = AskForInput<double>("Enter right value :"); 
      Add(value1, value2); 
     } 
    } 
} 

public static TResult AskForInput<TResult>(string message) 
{ 
    bool isValid = false; 
    TResult result = default(TResult); 
    while(!isValid) 
    { 
     Console.WriteLine(message); 
     string value = Console.ReadLine(); 
     try 
     { 
      result = (TResult)Convert.ChangeType(value, typeof(TResult)); 
      isValid = true; 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine("Input does not match requested type"); 
     } 
    } 
    return result; 
} 

static void Add(double value1, double value2) 
{ 
    double result = value1 + value2; 
    Console.WriteLine(result); 
} 

static void Subtract(double value1, double value2) 
{ 
    double result = value1 - value2; 
    Console.WriteLine(result); 
} 

static void Multiply(double value1, double value2) 
{ 
    double result = value1 * value2; 
    Console.WriteLine(result); 
} 

Check this online

2

你的問題是,你要分配的輸入到Int32,這是一個整數,這意味着0.4是無效的,也整數有以下限制:

Type  Capacity 

    Int16 -- (-32,768 to +32,767) 

    Int32 -- (-2,147,483,648 to +2,147,483,647) 

    Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807) 

來自this answer

如果你想繼續使用整數,你可以考慮使用Int64來代替。否則,你應該使用Double

編輯看來decimal更適合計算器。

1

如前所述,您應該使用Int64,Double或甚至Decimal。除此之外,還有其他一些問題。也許這些可以是學習要點:

  • 你沒有使用變量輸入,而且很奇怪你將它初始化爲Console.ReadLine(),除掉它。
  • 雖然(真)不是一個好的循環條件。你打算如何關閉應用程序?
  • 您在混合業務邏輯和演示文稿。添加,乘法和減法應該只進行計算(業務邏輯)並讓主循環執行演示(Console.WriteLine())。
  • value1和value2是值參數,它們在業務邏輯函數外沒有任何意義,所以在返回之前不需要將它們設置爲0。
  • 使用$「{result}」格式的字符串+1。
+0

我會用中斷命令關閉應用程序 –

相關問題