【问题标题】:What do i use instead of a int here? C# CMD我在这里用什么代替 int ? C# 命令
【发布时间】:2017-08-07 12:35:57
【问题描述】:

所以我只是想开始一般的编码,我试图用 C# 制作一个计算器,它确实可以工作,但我不能输入 0.4 个问题或超过 9 个数字,否则我的计算器会给我这个错误:值对于 Int32 来说太大或太小。

我搜索了这个问题并被引导到这个网站,这里的人们正在谈论使用字符串来代替。我试过了,但它告诉我我不能使用 - 运算符或 * 运算符。

很抱歉,我什至问这个问题可能有一个超级简单的解决方案,但我希望有人能回答这个问题。

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;
    }
}

}

【问题讨论】:

  • 使用Int32.TryParse() 代替Convert.ToInt32() 以避免当您的输入不是有效的Int32 时出现问题。如果你需要处理小数,不要使用int,使用double
  • 如果您将数字存储在一个字符串中,您可以根据在学校学到的规则编写加、减、除、乘的代码。
  • 基本 .Net 类型:msdn.microsoft.com/en-us/library/ya5y69ds.aspx。了解它们是什么,然后选择最适合您的任务

标签: c# string int


【解决方案1】:

分析您的代码后,所有逻辑似乎都正常,但您似乎对数据类型一无所知。这是您应该开始的内容,on this page 您可以阅读有关 C# 的内置数据类型的信息。

您应该知道的另一件事是如何更改(或转换)数据类型。在您的代码中,您期望用户将遵循您的规则并正确输入所有内容。您必须将您的最终用户(甚至您自己)视为完全愚蠢的人,他们会在专门针对数字类型的字段中插入 "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

    EDIT看来decimal更适合计算器。

    【讨论】:

      【解决方案3】:

      如前所述,您应该使用 Int64、Double 甚至 Decimal。除此之外,您还有其他一些问题。也许这些可以成为学习点:

      • 你没有使用变量输入,很奇怪你正在将它初始化为 Console.ReadLine(),摆脱它。
      • 虽然 (true) 不是一个好的循环条件。您打算如何关闭应用程序?。
      • 您正在混合业务逻辑和表示。加法、乘法和减法应该只做计算(业务逻辑),让主循环做表示(Console.WriteLine())。
      • value1和value2是值参数,它们在业务逻辑函数之外没有任何意义,所以不需要在返回前将它们设置为0。
      • +1 用于使用 $"{result}" 格式字符串。

      【讨论】:

        猜你喜欢
        • 2013-02-08
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多