【发布时间】:2012-05-31 03:24:48
【问题描述】:
我在将排序类转换为使用数组列表对对象进行排序时遇到问题。它目前正在对对象进行排序,但我无法将其转换为对 Arraylist 进行排序。代码如下:
package Merge_Sort_Objects_ArrayList;
import java.util.ArrayList;
public class mergesort {
/**
* Merges two sorted portion of items array
* pre: items[start.mid] is sorted. items[mid+1.end] sorted. start <= mid <= end
* post: items[start.end] is sorted
*/
private static void merge(ArrayList <Comparable> items, int start, int mid, int end){
Comparable temp;
int pos1 = start;
int pos2 = mid + 1;
int spot = start;
ArrayList <Comparable> objectSort = items;
while (!(pos1 > mid && pos2 > end)){
if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
temp[spot] = items[pos2];
pos2 +=1;
}else{
temp[spot] = items[pos1];
pos1 += 1;
}
spot += 1;
}
/* copy values from temp back to items */
for (int i = start; i <= end; i++){
items[i] = temp[i];
}
}
/**
* mergesort items[start..end]
* pre: start > 0, end > 0
* post: items[start..end] is sorted low to high
*/
public static void mergesort(ArrayList <Comparable> items, int start, int end){
if (start < end){
int mid = (start + end) / 2;
mergesort(items, start, mid);
mergesort(items, mid + 1, end);
merge(items, start, mid, end);
}
}
}
现在我已经开始转换它了,但是我被困在这部分:
while (!(pos1 > mid && pos2 > end)){
if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
temp[spot] = items[pos2];
pos2 +=1;
}else{
temp[spot] = items[pos1];
pos1 += 1;
}
spot += 1;
}
/* copy values from temp back to items */
for (int i = start; i <= end; i++){
items[i] = temp[i];
}
提前谢谢你!
【问题讨论】:
-
澄清您所说的“卡住”是什么意思。你遇到什么麻烦了?你试过什么?这对我来说似乎很简单。
-
我坚持的是将 while 语句转换为使用数组列表且没有错误的 while 语句。我遇到的问题是我不确定如何开始转换它。
-
哦,你有错误吗?有哪些错误?这意味着你已经付出了一些努力,对吧?那么为什么不展示你在 while 循环中尝试过的内容。这两件事显然都是相关的信息。
-
好点,抱歉。我收到的错误基本上是告诉我我需要一个数组,但是找到了 java 可比较的。但是,我试图从数组列表中读取排序器,而不是数组。这有任何意义吗?我在问怎么做。我真的不知道怎么做。我只是想就如何解决它征求一些建议,因为我以前没有这样做过。
-
啊,如果您以前根本没有使用过
List,那么这里有一个可能会有所帮助的教程:docs.oracle.com/javase/tutorial/collections/interfaces/…。第一步是了解列表和数组之间的区别。