Я хочу удалить элементы, которые находятся в 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;
}
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
Вы можете преобразовать двойной массив в массив списка, потому что компилятор просто составляет список со всеми элементами, но компилятор не может знать, какой размер создать 2D-массив.
Может быть, вы могли бы попробовать создать список списков. Однако вам нужно будет пройти по массиву еще два раза. Один для присвоения значений вложенному списку, а затем для повторного присвоения их двойному массиву перед возвратом значения.
Вы можете использовать перегруженный метод toArray () .. вот так -
double[][] remainingStockout = new double[array.length][array.length];
stockout.toArray(remainingStockout);
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.