0

我正在玩数组,我想创建一个程序,您可以在其中输入货币的价值,然后检查您需要多少硬币或纸币来填充该值。

如果您输入 650,您应该得到一个:500 一个 100 和一个 50。这是我目前得到的程序,但不知何故,它只打印出存储在 bankovci 数组中的所有值。

public static void main(String[] args) {

    int[]bills = {500,200,100,50,20,10,5,2,1};
    int amount=Integer.parseInt(JOptionPane.showInputDialog("Vnesi znesek: "));
    int sum=0;
    System.out.print("We will need bills for: ");
    while(sum<=amount)
    {
    for(int i=0; i < bills.length; i++)
    {
        if(amount-bills[i]>=0)
        {
            sum+=bills[i];

        }
        else if(amount-sum>bills[i])
        {
            i+=1;
        }System.out.print(bills[i]+", ");
    }


    }}}

编辑

如果我输入 650 或任何其他数字,我会得到以下输出:

我们需要以下账单:500, 200, 100, 50, 20, 10, 5, 2, 1,

4

4 回答 4

0

试试这个算法:

int[] numbers = new int[bills.length];
int total = amount;
for (int i = 0; i < bills.length; i++) {
    numbers[i] = total / bills[i]; // Will perform integer division
    total = total % bills[i]; // equivalent to total -= numbers[i]*bills[i];
}

只要 bills 是一个递减数组(从最高的可用钞票开始),它就会起作用。 numbers将包含i第 -th 钞票面值的钞票数量。

于 2014-06-30T12:23:17.400 回答
0

我将向您展示一个逻辑错误:

  1. 金额 - 账单[0] >=0?-> 650 - 500 >= 0?:是的,总和 = 500 打印:“500,”
  2. 金额 - 账单[1] >=0?-> 650 - 200 >= 0?:是的,总和 = 700 打印:“200,”等...

您应该将 for 循环更改为:

for(int i = 0; i < bills.length;) {
    if(amount >= bills[i]) {
        system.out.print(bills[i] +", ");
        amount -= bills[i];
    }
    else {
        i++;
    }
}

我认为应该这样做:D

编辑:您应该删除

while(sum<=amount)

当你尝试我的建议时

于 2014-06-30T12:29:09.163 回答
0

用这个

                        public static void main(String[] args) {
                            List<Integer> availNote = new ArrayList<Integer>();
                            availNote.addAll(Arrays.asList(500,200,100,50,20,10,5,2,1));
                            System.out.println(availNote);
                            Scanner in = new Scanner(System.in);
                            int znesek=Integer.parseInt(in.next());
                            System.out.print("Potrebovali bi bankovce za: " );
                            List<Integer> splitedAmount = new ArrayList<Integer>();
                            while(znesek != 0){
                            for(int i=0; i < availNote.size(); i++)
                            {
                                if(znesek >= availNote.get(i) ){
                                    splitedAmount.add(availNote.get(i));
                                    znesek  = znesek - availNote.get(i);
                                }
                            }
                            }
                            System.out.println(splitedAmount);

                        }
于 2014-06-30T12:30:09.643 回答
0

有更简洁的方法可以解决这个问题(不使用 break 关键字),我相信其他人会发布。但是为了帮助您了解哪里出了问题,这里是您提供的代码的修改版本。请注意,我更改了 if 语句,并删除了 else 块。我还必须添加一个 break 来提前退出 for 循环,这就是我认为你试图使用 i+1 的原因。

public static void main(String[] args) {
    int[]bills = {500,200,100,50,20,10,5,2,1};
    int amount=250;
    int sum=0;
    System.out.print("We will need bills for: ");
    while(sum<amount)
    {
        for(int i=0; i < bills.length; i++)
        {
            if(sum+bills[i] <= amount)
            {
                sum+=bills[i];

                System.out.print(bills[i]+", ");

                break;
            }
        }
    }}
于 2014-06-30T12:30:48.293 回答