0

我不断收到错误“Money 类中的构造函数 Money 不能应用于给定类型;必需:无参数;找到 int、int;原因:实际参数列表和正式参数列表的长度不同”

另外这里是我将要评分的程序的目标列表,如果您发现我的代码中可能会遇到任何其他错误,请随时为我指出!

使用 BlueJ 创建具有两个整数实例变量、美元和美分的 Money 类。提供以下方法:

  1. 初始化实例变量的两参数构造函数。构造函数应该检查美分值是否在 0 和 99 之间,如果不是,则将一些美分转移到美元变量以使其介于 0 和 99 之间。
  2. 将美元初始化为 0 并将美分初始化为 1 的默认构造函数。它应该调用双参数构造函数。
  3. 一个参数构造函数,在将美元值设置为 0 的同时初始化美分值。此构造函数还应检查美分值是否在 0 和 99 之间,如果不是,则将一些美分转移到美元变量以使其介于 0 之间和 99。
  4. 美元和美分的存取器
  5. 标准 toString 方法
  6. 比较两个 Money 对象是否具有相同状态的标准 equals 方法。
  7. 将 Money 对象作为参数的 plus 方法。它创建并返回一个新的 Money 对象,该对象表示正在调用其 plus() 方法的对象和参数的总和。它不会修改两个现有对象的值。

最后,创建一个创建多个 Money 对象的 MoneyDemo 类。此演示类应测试您已实现的所有构造函数和方法。

这是我的代码:

public class Money
 {
     private int dollars, cents;
     private static final int CENTS_PER_DOLLAR = 100;

     public void checkMoney(int dollars, int cents)
     {
         while (cents<0) 
         {
             cents += 100;
             dollars--;
         }
         while (cents>99) 
         {
             cents -= 100;
             dollars++;
         }
     }

     public Money()
     {
         this.cents = 1;
         this.dollars = 0;
     }

     public void initializeCents(int cents)
     {
         while (cents<0) 
         {
             cents += 100;
             dollars--;
         }
         while (cents>99) 
         {
             cents -= 100;
             dollars++;
         }
     }

     public int getDollars()
     {
         return dollars;
     }

     public int getCents()
     {
         return cents;
     }

     public String toString()
     {
         String str;
         dollars = dollars + cents / CENTS_PER_DOLLAR;
         cents = cents % CENTS_PER_DOLLAR;
         str = "Your total amount is: " + "$" + dollars + "." + cents +"";
         return str;
     }

     public Money plus(Money y) 
     {
         return new Money(y.dollars, y.cents);
     }
 }

public class MoneyDemo 
 {
     public static void main(String[] args) 
     {

         int dollars = 5;
         int cents = 80;
         Money x = new Money( dollars, cents);
         x.checkMoney();

         dollars = 7;
         cents = 70;
         Money y = new Money( dollars, cents);
         y.checkMoney();

         USMoney z = x.plus(y);

         System.out.println( "x: $" + x.dollars + "." + x.cents + "c");
         System.out.println( "y: $" + y.dollars + "." + y.cents + "c");
         System.out.println( "x.plus(y): $" + z.dollars + "." + z.cents + "c");
     }
 }
4

2 回答 2

2

你在打电话

Money x = new Money( dollars, cents);有两个论据

你已经将它定义为

public Money()  // no argument constructor
{
     this.cents = 1;
     this.dollars = 0;
}

所以让它像这样:

public Money() // no argument constructor
{
     this.cents = 1;
     this.dollars = 0;
}
public Money(int dollars,int cents) // parametrized constructor
{
     this.cents = dollars;
     this.dollars = cents;
}

这样它既可以用于无参数构造函数,也可以用于具有两个参数的参数化构造函数

更新:对于plus方法`

public Money plus(Money y) 
{
    Money m = new Money();
    int totalCents = y.cents + this.cents;
    int totalDollars = y.dollars + this.dollars;
    if(totalCents > 100)
    {
       totalDollars = totalDollars + (int)(totalCents / 100);
       totalCents = (int)(totalCents % 100);
    }

    m.dollars = totalDollars;
    m.cents = totalCents;

    return m;
}
于 2013-02-06T09:17:48.327 回答
0

你得到的错误意味着你没有一个构造函数来接受你试图传递的参数(两个整数)。您拥有的唯一构造函数不带参数:

public Money()

您需要创建一个新的构造函数,其内容为

public Money (int cents, int dollars) 

    //make sure that cents is between 0 and 99, if not transfer some cents to dollars

您将需要第三个构造函数来满足您的分配#3:

public Money (int cents) 
    initialize cents based on the parameter passed into it
    set dollars = 0

您还需要覆盖 equals() 方法。

由于这是一个家庭作业,我不会告诉你如何做这些事情。

让我知道我是否可以与您讨论任何事情,或者更详细地解释任何事情。

于 2013-02-06T09:20:14.857 回答