Я хочу удалить элементы, которые находятся в routedClients из array, поэтому я преобразовал его в ArrayList, затем использовал remove, наконец, я преобразовал его обратно в {{X4} } массив. Но когда я его выполняю, он дает мне сообщение об этой строке:

double[][] remainingStockout = (double[][]) stockout.toArray();

Ошибка:

Исключение в потоке "main" java.lang.ClassCastException: [Ljava.lang.Object; не может быть преобразован в [[Ljava.lang.Double;

Любая помощь могла бы быть полезна. :)

public double[][] removeSite(double[][] array) {

    List<double[]> stockout = new ArrayList<double[]>(Arrays.asList(array));

    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < routedClients.size(); j++) {

            if (array[i][0] == routedClients.get(j)) {

                stockout.remove(i);
            }
        }
    }

    double[][] remainingStockout = (double[][]) stockout.toArray();

    return remainingStockout;

}
0
Majda Benaomar 8 Сен 2016 в 02:46

3 ответа

Лучший ответ

Ниже показано, что работает

double[][] remainingStockout = (double[][]) stockout.toArray(new double[][]{});

Полный класс для тестирования:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {
    static ArrayList<Double> routedClients = new ArrayList<Double>();

    public static void main(String[] args) {
        double[][] arr1 = { { 2, 4, 6 }, { 3, 6, 9 }, { 5, 10, 15 } };
        routedClients.add(new Double(1));
        routedClients.add(new Double(2));
        routedClients.add(new Double(3));

        print(arr1);
        double[][] arr2 = removeSite(arr1);
        print(arr2);
    }

    private static void print(double[][] arr1) {
        for (int i = 0; i < arr1.length; i++) {
            double[] arr2 = arr1[i];
            for (int j = 0; j < arr2.length; j++) {
                System.out.println("arr1[" + i + "][" + j + "] = " + arr1[i][j]);
            }
        }
    }


    public static double[][] removeSite(double[][] array) {

        List<double[]> stockout = new ArrayList<double[]>(Arrays.asList(array));
        System.out.println("length before = " + stockout.size());

        for (int i = array.length-1; i >= 0; i--) {
            for (int j = 0; j < routedClients.size(); j++) {
                if (array[i][0] == routedClients.get(j)) {
                    System.out.println("removing " + routedClients.get(j));
                    stockout.remove(i);
                }
            }
        }
        double[][] remainingStockout = (double[][]) stockout.toArray(new double[][] {});
        System.out.println("length after = " + remainingStockout.length);
        return remainingStockout;
    }

}

Вот результат

arr1[0][0] = 2.0
arr1[0][1] = 4.0
arr1[0][2] = 6.0
arr1[1][0] = 3.0
arr1[1][1] = 6.0
arr1[1][2] = 9.0
arr1[2][0] = 5.0
arr1[2][1] = 10.0
arr1[2][2] = 15.0
length before = 3
removing 3.0
removing 2.0
length after = 1
arr1[0][0] = 5.0
arr1[0][1] = 10.0
arr1[0][2] = 15.0
3
Harry 8 Сен 2016 в 02:47

Вы можете преобразовать двойной массив в массив списка, потому что компилятор просто составляет список со всеми элементами, но компилятор не может знать, какой размер создать 2D-массив.

Может быть, вы могли бы попробовать создать список списков. Однако вам нужно будет пройти по массиву еще два раза. Один для присвоения значений вложенному списку, а затем для повторного присвоения их двойному массиву перед возвратом значения.

0
Felipe Centeno 8 Сен 2016 в 00:06

Вы можете использовать перегруженный метод toArray () .. вот так -

double[][] remainingStockout = new double[array.length][array.length];

    stockout.toArray(remainingStockout);
0
Rohit 8 Сен 2016 в 00:06