需要Java作业方面的帮助吗

需要Java作业方面的帮助吗,java,Java,我的家庭作业需要一些帮助。我的任务是创建一个程序,该程序创建一个Till对象,接受付款,发布准确的零钱,告诉我需要使用哪些硬币,然后告诉我钱柜里有多少钱。下面是我写的代码。USmoney类已完成并正在运行。老师提供了一张备忘单。然而,它是一个主要的类(CoinCalc),它获得了取款机,从支付的金额中减去支付的金额,从而得到我有问题的零钱。任何帮助都将不胜感激 public class USmoney { int dollars = 0; int cents = 0; public

我的家庭作业需要一些帮助。我的任务是创建一个程序,该程序创建一个
Till
对象,接受付款,发布准确的零钱,告诉我需要使用哪些硬币,然后告诉我钱柜里有多少钱。下面是我写的代码。
USmoney
类已完成并正在运行。老师提供了一张备忘单。然而,它是一个主要的类(
CoinCalc
),它获得了取款机,从支付的金额中减去支付的金额,从而得到我有问题的零钱。任何帮助都将不胜感激

public class USmoney {
  int dollars = 0;
  int cents = 0;

  public USmoney(int newcents) {
    dollars = newcents /100;
    cents = newcents %100;
  }
  public USmoney(int dollars, int cents) {
    this.dollars = dollars;
    this.cents = cents;
  }

  public int getDollars() {
    return dollars;
  }

  public int getCents(){
    return cents;
  }
}

public class CoinCalc {
  public static void main(String[] args) {
    USmoney Till1 = new USmoney(100,0);
    USmoney billTotal = new USmoney(49);
    USmoney amountPaid = new USmoney(100);

    double penny = 1;
    double nickel = 5;
    double dime = 10;
    double quarter = 25;

    double[] Coin = new double []{penny,nickel,dime,quarter};

  }

  private void changeFor(USmoney billTotal, USmoney amountPaid) {
  }
}
这是多种多样的,您需要执行几个步骤

  • 计算总变化
  • 使用最小数量的硬币来满足变化
  • 我首先在USMoney类中实现一个具有第一个签名的方法,然后阅读背包问题以实现第二个方法

    public USMoney subtract(final USMoney value);
    
    public double[] getCoins(final USMoney value);
    

    为了调用changeFor()方法,需要对CoinCalc类进行引用。您可以用不同的方法来实现,一种方法是在main()方法中声明CoinCalc类的变量,如下所示:

    CoinCalc cc = new CoinCalc();
    
    cc.changeFor(billTotal, amountPaid);
    
    但是仍然存在一些问题,changeFor()方法目前不起任何作用,并且您声明till对象和coin数组的方式无法在changeFor()方法中访问它们

    所以先解决一下这个问题,然后再联系我们

    编辑

    以下是我将如何构造它,
    billtoatal
    是一个
    float amountPaid
    是一个
    USMoney
    对象,它在内部跟踪每种货币面额($1比尔、四分之一、一角、五分和一分)。当有人付钱时,他们会给你不同数额的钱
    USMoney
    需要一种方法来返回它所拥有的货币种类的价值(美元、季度等的总和)

    till
    USMoney
    的另一个实例,它具有不同面值货币的初始值

    USMoney
    有一个名为
    changeFor(float bill,USMoney paid)
    的方法,该方法返回另一个
    USMoney
    实例。你会这样称呼它:

    USMoney change = till.changeFor(bill, amountPaid);
    

    然后,
    changeFor()
    方法必须根据
    till
    中的内容以及
    bill
    amountPaid
    之间的差异来确定如何进行更改。注意,如果你没有足够的硬币,你的计算应该足够聪明,如果有足够的硬币,你可以使用一角硬币和五分硬币。如果你真的想变得聪明,如果你不能进行更改,就抛出一个异常。

    看起来你需要有关changeFor算法的帮助,所以这里有一个提纲:

    首先从已付金额中减去billTotal。这会让你改变多少


    然后做一些变量来控制你要回馈多少变化。对于四分之一硬币、一角硬币、五分硬币、一便士硬币中的每一个,如果changeRemaining大于硬币的价值,则添加一枚硬币,然后减去价值。为每个硬币做这个,直到硬币的值不能通过测试,然后转到下一个硬币。

    < P>这里有两个问题,你可以单独考虑。< /P>
  • 你能用算法描述如何确定问题的答案吗
  • 给出了这个描述,你能把它转换成Java代码吗
  • 我将从解决第一项开始:您必须准确地理解输入是什么以及所需的输出是什么,并且能够给出如何解决问题的精确伪代码描述。如果你不知道什么是伪代码,那就在维基百科上查一下。然后,您可以开始考虑如何用Java编写代码。 从算法的角度来看,你的问题很简单

    假设客户支付的金额为X,而购买的物品的成本为C。 首先,您必须检查X>=C。否则客户将没有支付足够的费用,您可以立即停止

    假设X>=C,并且您能够提供准确的零钱,在交易完成后,钱柜中的金额将增加C,因为这正是客户最终支付的金额

    现在,你必须给的变化量应该等于X-C,称之为Y

    测试您现有的最大硬币有多少倍于Y: 假设最大的硬币的价值为V,那么您应该将该价值的Y/V硬币返还给客户。 之后,您需要向客户偿还剩余的钱Y'=Y-(Y/V)*V。确保您知道division在Java中是如何工作的(请参阅本文末尾的链接)。 重复这个过程,用第二大的硬币来偿还Y,依此类推

    二,。 我不会用java写出整个事情,但是有些事情你应该考虑。 收银台是否包含“货币”,但未明确说明其包含的纸币/硬币,或者您是否应将货币表示为若干纸币和硬币

    您将进行整数除法,因此您的硬币值不应为双倍,而应为整数

    您需要从计算更改的函数内部访问硬币值(一角硬币值多少等),因此不同硬币的值可能应该声明为CoinCalc类的静态成员变量,而不是在函数内部

    您需要确保知道基本的if-else语句和while循环如何工作,以及如何分配给变量。然后您应该能够编写解决方案

    您还需要确定解决方案到底是什么。它可以是一个硬币名称列表,每次需要时都会重复一个名称,例如[一角硬币,一分钱,一分钱],也可以是一个由四个数字组成的数组,表示需要多少夸脱、一角硬币、五分钱和一分钱。如果您想要一个列表,您应该通过阅读Java文档中的条目来了解列表数据结构在Java中是如何工作的

    祝你好运

    注:因为我是一个新用户,我不能发布我想要的那么多链接。您可以通过goo在Java中找到一个很好的除法描述