将两个数组中的整数连接成字符串的问题

问题描述 投票:0回答:1

这是一个使用贪婪方法将货车装满大篷车的重量加载程序。我试图将数组中的Integer元素连接到必须遵循此模式的字符串输出中。

```
(wagon capacity) -> (weights of packages in wagon) = (total weight of the wagon)
100 –> (70, 25) = 95
200 -> (100, 90) = 190
140 –> (78, 60) = 138
600 –> (600) = 600
```

现在,我的代码对我的容量和权重进行排序(降序),并将其添加到onBoard变量中,当我尝试打印时,它会正确显示容量,但未连接我的权重,而同时重用了首重。这是我的代码,任何反馈将不胜感激。

```
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    Integer[] cartCapacity = {100, 200, 140, 600};
    Integer[] cargoTons = {50, 60, 70, 100, 50, 41, 25, 78, 90, 41, 600};

    /*Desired output
     *(wagon capacity) -> (weights of packages in wagon) = (total weight of the wagon)
     * 100 –> (70, 25) = 95
     * 200 -> (100, 90) = 190
     * 140 –> (78, 60) = 138
     * 600 –> (600) = 600
     * 
     * Current output
     * 600->{600}
     * 200->{600}
     * 140->{600}
     * 100->{600}
     */

    //Sorting Carts
    Arrays.sort(cartCapacity, Collections.reverseOrder());
    //Sorting package tonnage
    Arrays.sort(cargoTons, Collections.reverseOrder());


    //After sorting carts
    System.out.println("The carts capacities are: ");
    for (int i = 0; i < cartCapacity.length; i++) {
        System.out.println(cartCapacity[i]);
    }


    System.out.println();


    //After sorting package tonnage
    System.out.println("The packages weights are: ");
    for (int i = 0, k = 0; i < cargoTons.length; i++) {
        System.out.println(cargoTons[i]);
    }


    int cartOnBoard = 0;
    int cartIdx = 0;
    String cartElements = "";
    while (cartIdx < cartCapacity.length) {
        for (int i = 0; i < cargoTons.length; i++) {
            if (cartOnBoard + cargoTons[i] <= cartCapacity[cartIdx]) {
                cartOnBoard += cargoTons[i];
                cartIdx++;
                cartElements += Integer.toString(cartOnBoard);
                System.out.println(Integer.toString(cartCapacity[i]) + "->{" + cartElements + "}");
            } 
            else
                System.out.println(Integer.toString(cartCapacity[i]) + "->{" + cartElements + "}");
        }
    }
    }
```
java greedy
1个回答
0
投票

存在多个问题,这是带注释的固定循环:

int cartIdx = 0;
while (cartIdx < cartCapacity.length) {
    int cartOnBoard = 0; // this should be initialized for every cart
    String cartElements = ""; // this should be initialized for every cart
    for (int i = 0; i < cargoTons.length; i++) {
        if ((cartOnBoard + cargoTons[i]) <= cartCapacity[cartIdx] && cargoTons[i] > 0) {
            cartOnBoard += cargoTons[i];
            cartElements += Integer.toString(cargoTons[i]) + ",";
            cargoTons[i] = -1; // you need to mark used cargos
        }
    }
    System.out.println(Integer.toString(cartCapacity[cartIdx]) + "->{" + cartElements + "}"); // print one line per cart, not per every cargo
    cartIdx++;
}

-1
投票

循环和逻辑本身存在多个问题。尝试以下代码,看看是否可行

public static void main(String[] args) {
        // TODO Auto-generated method stub

        Integer[] cartCapacity = {100, 200, 140, 600};
        Integer[] cargoTons = {50, 60, 70, 100, 50, 41, 25, 78, 90, 41, 600};

        /*Desired output
         *(wagon capacity) -> (weights of packages in wagon) = (total weight of the wagon)
         * 100 –> (70, 25) = 95
         * 200 -> (100, 90) = 190
         * 140 –> (78, 60) = 138
         * 600 –> (600) = 600
         * 
         * Current output
         * 600->{600}
         * 200->{600}
         * 140->{600}
         * 100->{600}
         */

        //Sorting Carts
        Arrays.sort(cartCapacity, Collections.reverseOrder());
        //Sorting package tonnage
        Arrays.sort(cargoTons, Collections.reverseOrder());


        //After sorting carts
        System.out.println("The carts capacities are: ");
        for (int i = 0; i < cartCapacity.length; i++) {
            System.out.println(cartCapacity[i]);
        }


        System.out.println();


        //After sorting package tonnage
        System.out.println("The packages weights are: ");
        for (int i = 0, k = 0; i < cargoTons.length; i++) {
            System.out.println(cargoTons[i]);
        }


        int cartOnBoard = 0;
        int cartIdx = 0;
        String cartElements = "";
        for (int i = 0; i < cargoTons.length; i++) {
            if (cartOnBoard + cargoTons[i] <= cartCapacity[cartIdx]) {
                cartOnBoard += cargoTons[i];
                cartElements += Integer.toString(cargoTons[i]) + ",";
            } else {
                System.out.println(Integer.toString(cartCapacity[cartIdx]) + " -> (" + cartElements.substring(0, cartElements.length()-1) + ") = "+cartOnBoard);
                cartIdx++;
                cartOnBoard = cargoTons[i];
                cartElements = Integer.toString(cargoTons[i])+",";
                if(cartIdx >= cartCapacity.length)
                    break;
            }
        }

    }
© www.soinside.com 2019 - 2024. All rights reserved.