循环定位和倍增

时间:2017-08-13 05:54:12

标签: java arrays list loops

对某些人来说这可能很容易,但是我在学习时有点困惑,你会看到:

                int mult[]={1,2,3,4,5,6,7,8,9,10};
                changeA.get(changeA.size()-1);
                for (int i = 0; i < mult.length; i++) {
                    int fullChange=((changeA.size()-1)*mult[i]);
                    System.out.println("changeA: "+ (changeA.size()-1) +".");
                    System.out.println("fullChange: "+fullChange);}

这是我一直在做的代码的一部分,我在这里的问题是在我的ArrayList中。我想做的是:

  1. 从我在此处执行的列表中抓取最后一项:

    int fullChange =((changeA.size() - 1)* mult [i]);

  2. 然后乘以上面的数组,我也在同一行。

  3. 打印它(我会抓住输出来做其他一些事情,但由于我在解决这个问题时遇到了问题,我无法继续前进)。

  4. 问题出现时,问题明确说明:以最少的金币/账单。因此,我的代码必须获取列表中的最后一项,该项是根据填充ArrayList的上层决策确定的。但是我的代码没有这样做,我的代码所做的就是获取列表中的第二个最新项目并将其相乘给我正确答案,但不是合适数量的硬币。 这是一个例子

      

    让我们说你以5美元买一块可乐,你用10美元的钞票支付。因此,在最少的硬币/账单中,更改将是5美元的账单。如果他们没有5美元的账单,他们会给你5美元1美元的账单。等等。

    这是一个输出: Code output

    我还必须说上面代码的最后两行用于测试和保证我的观点。提前致谢

    编辑: 这是上面代码之后的内容:

    if (fullChange==change) {
                            System.out.println("El cambio es: "+fullChange+" en monedas de: "+changeA.get(changeA.size()-1)+" con un total de: "+mult[i]+" monedas");
                            break;
                        }
    

    所以在mult [i]而不是给我1它给了我5(使用上面的例子)

1 个答案:

答案 0 :(得分:2)

如果我理解正确的问题,这应该是解决方案:

    ArrayList<Integer> changeA = new ArrayList<Integer>() {{
        add(5);
        add(10);
        add(20);
        add(50);
        add(100);
    }};

    int change = 10;
    outer: for (int i = changeA.size() - 1; i >= 0 ; i--) {
        for (int j = 1; j <= 10; j++) {
            int fullChange = changeA.get(i) * j;
            System.out.println("changeA: " + changeA.get(i) + ".");
            System.out.println("fullChange: " + fullChange);
            if (fullChange==change) {
                System.out.println("El cambio es: "+fullChange+" en monedas de: "+
                        changeA.get(i)+" con un total de: "+j+" monedas");
                break outer;
            }

        }
    }

只需对代码进行最小的更改。