gpt4 book ai didi

java - 交换 ArrayList 中的两个对象

转载 作者:行者123 更新时间:2023-11-30 11:35:04 25 4
gpt4 key购买 nike

我正在尝试在 ArrayList 中交换 2 个对象.为此,我创建了一个交换对象的新列表,然后用 swapped 列表完全覆盖 old 列表。但是,我无法将旧列表中的对象添加到新列表中。

该程序从文本文件中获取输入,将数据读入对象(圆形和矩形,它们是 GeometricObject 的扩展),然后将这些对象添加到 ArrayList 中。称为 objectList .

代码如下:

public static <E extends Comparable<E>> void swapCells
(ArrayList<E> objectList, int left, int right) {

/* The user may enter the two indices, "left,"
* and, "right," in any order which they desire.
* Because of this it will be necessary to determine
* which is larger or "right" index, and which is
* the smaller or "left" index
*/

int temp;
ArrayList<GeometricObject> swappedList = new ArrayList<GeometricObject>();

if (left > right) {

// Exchanges left and right
temp = left;
left = right;
right = temp;

}

for (int i = 0; i < objectList.size(); i++) {

if (i == left) {
swappedList.add(objectList.get(right));
System.out.println( swappedList.get(i).getArea());
} else {
swappedList.add((E) objectList.get(i));

}

}

} // End of swapCells

我收到以下语法错误,不知道该怎么办。

The method add(GeometricObject) in the type ArrayList<GeometricObject> is not applicable for the arguments (E)

错误具体在swappedList.add(objectList.get(right));还有wappedList.add((E) objectList.get(i)); .

最佳答案

我不认为这正是您要找的答案,但它可能有所帮助。

如果您使用 GeomtricObject 进行类型转换,您将获得一个功能代码,但是,如果您只是想将其强制转换为几何对象,这就违背了使用泛型的目的。

你还需要添加 else if 来让左边的对象交换到右边的位置

您可能还想打印出 swappedList 以确认操作已完成。

        for (int i = 0; i < objectList.size(); i++) 
{
if (i == left) {
swappedList.add((GeometricObject) objectList.get(right));
}else if (i == right)
swappedList.add((GeometricObject) objectList.get(left));
else {
swappedList.add((GeometricObject) objectList.get(i));
}
}

编辑 2:以下内容将帮助您完成您在泛型中寻找的操作。

您需要制作一个临时文件并将其转换为 E。您还需要使用以下代码以及正确的参数和/或形式/符号。

        E temp
List.set(____ , _____)
List.get(____ )

如果您仍然无法使用此交换功能,请查看一个非通用的功能。

编辑 3:你很可能和我有同样的问题,你也需要对 Generic 进行排序。您可以使用下面的 selectionSort 方法来帮助您完成分配。您需要更改该方法,使其适用于 ArrayList 而不是 Array。这意味着您将需要利用 EDIT 2 中的建议来修改下面的代码。您可能还需要使用 compareTo 方法。

        private static void selectionSort(int[] list, int low, int high) { 
if (low < high) {
int posMax = high;
int theMax = list[high];
for (int i = 0; i < high; i++) {
if (list[i] > theMax) {
theMax = list[i];
posMax = i;
}// if
}// for
list[posMax] = list[high];
list[high] = theMax;
selectionSort(list, low, high - 1);
}// if
}

关于java - 交换 ArrayList 中的两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15316349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com