使用多种方法的图书费用代码错误

时间:2018-03-16 19:56:56

标签: c#

我正在制作一个图书馆程序,要求用户输入已检出的图书数量及其超过的天数。如果它低于或等于7天,则每本书在7天后收取10美分,每本书20美分。我们应该使用多种方法,但我得到两个错误:

  

使用未分配的本地变量' totalCharge'

     

没有任何论据符合所需的形式参数' daysOverdue' Program.charge(double,double,double)'

我想我知道第一个错误意味着什么,但我想我已经在第一行宣布它是一个变量。

到目前为止,这是代码:

static void Main(string[] args){
        double totalCharge;

        Console.WriteLine("Please enter the number of books checked out.");
        double booksChecked = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Please enter the number of days they are 
         overdue.");
        double daysOverdue = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Your total charge for {0} days overdue is {1}.", 
        daysOverdue, totalCharge.ToString("C"));
        Console.ReadKey();

        totalCharge = charge();
    }
    private static double charge (double daysOverdue, double booksChecked, 
      double totalCharge)
    {

        if (daysOverdue <= 7)
        {
          return totalCharge = booksChecked * daysOverdue * .10;
        }
        else
            {
            return (booksChecked * .70) + (booksChecked) * (daysOverdue - 7) 
         * (.20);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题,我将在此处进行审核。我的更正是在这个答案的最后。我建议将你的代码和我的代码放在一起并仔细检查差异。

首先,在分配值之前,无法从变量中读取值。您必须先将某些内容分配给它。

在打印出charge(...)的值之前,您需要致电totalCharge

其次,您无需将totalCharge的值传递给charge(...)方法:返回总费用!所以完全删除该参数。

第三,您需要将参数传递给charge方法。

第四,你有一些格式问题。请查看我的代码,看看我是如何以不同方式格式化代码的。如果一行代码继续到下一行,请使用缩进来反映这一点。根据C#约定,函数名称应大写。

最后,这不一定是个问题,但看起来并不正确:在两个地方,您要将Convert.ToInt32(...)分配给double。为什么?那些应该是整数。

static void Main(string[] args)
{
    Console.WriteLine("Please enter the number of books checked out.");
    double booksChecked = Convert.ToInt32(Console.ReadLine());

    Console.WriteLine("Please enter the number of days they are overdue.");
    double daysOverdue = Convert.ToInt32(Console.ReadLine());

    // assign before printing out value
    // pass the two parameters into the function
    double totalCharge = Charge(daysOverdue, booksChecked);

    Console.WriteLine("Your total charge for {0} days overdue is {1:C}.", 
        daysOverdue, 
        totalCharge);

    Console.ReadKey();
}   

private static double Charge(double daysOverdue, double booksChecked)
{
    if (daysOverdue <= 7)
    {
        return booksChecked * daysOverdue * .10;
    }
    else
    {
        return (booksChecked * .70) + booksChecked * (daysOverdue - 7) * (.20);
    }
}