用户输入重载的方法(ReadLine())

时间:2014-03-05 15:43:06

标签: c# user-input overloading

我正在学习C#自己(不是家庭作业)并且在有用户输入时对方法重载感到困惑。

我正在进行一项练习,允许用户输入项目的出价金额。我需要包含3个重载方法(int,double,string)。 (练习说使用双倍而不是小数。)

我知道如何编写重载方法,我的困惑伴随着用户输入。如果我接受输入(ReadLine)作为字符串,它选择字符串方法,如果我接受输入为int,则调用int方法。我该如何处理?我使用tryParse吗?如何使用3种可能的输入方法(int,double,string)?

另外,要添加令人沮丧的扭曲,要接受字符串,它必须是数字,并以“$”符号或数字后跟“美元”开头。我希望我在下面的代码中正确完成了。不知道怎么用字符串修剪,所以我不得不按字符来做...

希望获得基本/简单的解释,因为我还没有学到任何太过花哨的东西。

谢谢!

namespace Auction
{
class Program
{
    static void Main(string[] args)
    { 
        string entryString;
        //int entryInt;  // do I need this?
        //int entryDouble;  // do I need this?
        double bidNum;

        const double MIN = 10.00;
        Console.WriteLine("\t** WELCOME TO THE AUCTION! **\n");

        Console.Write("Please enter a bid for the item:  ");
        entryString = Console.ReadLine().ToLower();
        double.TryParse(entryString, out bidNum);  // this turns it into a double...

        BidMethod(bidNum, MIN);
        Console.ReadLine();
    }

    private static void BidMethod(int bid, double MIN)
    {  // OVERLOADED - ACCEPTS BID AS AN INT
        Console.WriteLine("Bid is an int.");
        Console.WriteLine("Your bid is: {0:C}", bid);
        if (bid >= MIN)
            Console.WriteLine("Your bid is over the minimum {0} bid amount.", MIN);
        else
            Console.WriteLine("Your bid is not over the minimum {0} bid amount.", MIN);
    }

    private static void BidMethod(double bid, double MIN)
    {  // OVERLOADED - ACCEPTS BID AS A DOUBLE

        Console.WriteLine("Bid is a double.");
        Console.WriteLine("Your bid is: {0:C}", bid);
        if (bid >= MIN)
            Console.WriteLine("Your bid is over the minimum {0} bid amount.", MIN);
        else
            Console.WriteLine("Your bid is not over the minimum {0} bid amount.", MIN);
    }

    private static void BidMethod(string bid, double MIN)
    {  // OVERLOADED - ACCEPTS BID AS A STRING

        string amount;
        int amountInt;

        if (bid.StartsWith("$")) 
            amount = (bid as string).Trim('$');  // Remove the $
        if (bid.EndsWith("dollar"))
            amount = bid.TrimEnd(' ', 'd', 'o', 'l', 'l', 'a', 'r', 's');
        else
            amount = bid;

        Int32.TryParse(amount, out amountInt);  // Convert to Int
        Console.WriteLine("Bid is a string.");

        Console.WriteLine("Your bid is: {0:C}", bid);
        if (amountInt >= MIN)
            Console.WriteLine("Your bid is over the minimum {0} bid amount.", MIN);
        else
            Console.WriteLine("Your bid is not over the minimum {0} bid amount.", MIN);
    }
}

}

4 个答案:

答案 0 :(得分:2)

假设您希望支持各种输入金额的方式,那么我建议您使用TryParse的想法可行:

  • 首次使用int.TryParse - 因为int限制最多(不是 允许小数点等)
  • 第二次使用double.TryParse
  • 最后,如果这些都不起作用,请保留为字符串。

答案 1 :(得分:0)

我认为用int版本替换doubledecimal版本会更合适,因为decimal更便于存储货币值(搜索SO了解更多详情)。

因此,阅读输入,搜索美元符号,如果没有,请使用decimal.TryParse()decimal重载,否则使用string重载。

由于处理数字是否包含美元符号没有区别,我会做以下事情。

...
string entryString = Console.ReadLine();
BidMethod(entryString, 10.00m); // m stands for decimal, d for double
...

private static void BidMethod(string bid, decimal min)
{   
    decimal number;
    if (decimal.TryParse(bid.Replace("$", ""), out number))
    {
        Console.WriteLine("Your bid is: {0:C}", bid);
        if (number >= min)
            Console.WriteLine("Your bid is over the minimum {0} bid amount.", min);
        else
            Console.WriteLine("Your bid is not over the minimum {0} bid amount.", min);   
    }
}

答案 2 :(得分:0)

根据我的理解和您的意见: 因此,您需要(或练习请求)仅接受intdoublestring

我认为您需要首先检查输入值是否包含 $ ,如果是,则可以调用字符串函数。

然后,如果成功,则使用int将值检查为Int32.TryParse,然后调用int函数

最后一步是使用double

将值检查为Double.TryParse

Double的长度超过int,这就是为什么你应首先检查int

答案 3 :(得分:0)

using System;
using static System.Console;
namespace Auction
{
    class Program
    {
        static void Main(string[] args)
        {
            string entryString;
            decimal bidNum;
            const decimal MIN = 10.00m;

            Console.Write("Please enter a bid for the item:  ");
            entryString = Console.ReadLine().ToLower();
            decimal.TryParse(entryString, out bidNum);  // this turns it into a double...

            BidMethod(bidNum, MIN);
            Console.ReadLine();
        }