【发布时间】:2013-10-22 02:45:29
【问题描述】:
我正在尝试根据 Coin 对象的值按降序对一组 Coin 对象进行排序。我的 Coin 类中有一个 getValue() 方法。我的问题是最终结果根本没有排序。这就是我最终得到的。我似乎无法弄清楚我哪里出错了,任何提示都会有所帮助
在我们排序之前: [Coin[value=0.25,name=quarter], Coin[value=0.01,name=penny], Coin[value=0.1,name=dime], Coin[value=1.0,name=dollar], Coin[value=0.05 ,name=nickel]]
预期:[Coin[value=0.25,name=quarter], Coin[value=0.01,name=penny], Coin[value=0.1,name=dime], Coin[value=1.0,name=dollar],硬币[价值=0.05,名称=镍]]
排序后: [Coin[value=0.01,name=penny], Coin[value=0.1,name=dime], Coin[value=0.25,name=quarter], Coin[value=1.0,name=dollar], Coin[value=0.05 ,name=nickel]]
预期:[Coin[value=1.0,name=dollar], Coin[value=0.25,name=quarter], Coin[value=0.1,name=dime], Coin[value=0.05,name=nickel],硬币[value=0.01,name=penny]]
import java.util.Arrays;
/**
This class sorts an array of coins, using the selection sort
algorithm.
*/
public class CoinSelectionSorter
{
//
private Coin[] list;
/**
Constructs a selection sorter.
@param anArray the array to sort.
*/
public CoinSelectionSorter(Coin[] anArray)
{
list = anArray;
}
public String toString()
{
return Arrays.toString(list);
}
/**
Finds the largest coin in an array range.
@param from the first position in a to compare
@return the position of the largest coin in the
range a[from] . . . a[a.length - 1]
*/
public int maximumPosition(int from)
{
int max = from;
for(int i = 0; i < list.length-1; i++){
if(list[i].getValue() > list[max].getValue()){
max = i;
}
}
return max;
}
/**
Sorts an array.
*/
public void sort()
{
for(int i = 0; i < list.length -1; i++){
int max = maximumPosition(i);
swap(i, max);
}
}
/**
Swaps two entries of the array.
@param i the first position to swap
@param j the second position to swap
*/
public void swap(int i, int j)
{
Coin temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
【问题讨论】:
-
我不知道这是否是你的问题,但我认为你写
i < list.length-1的所有地方都应该是i < list.length。 -
另外,在同一行,
int i = from + 1而不是int i = 0。 -
看看你的 maximumPosition() 函数。在您的 cmets 中,您说该函数应该“返回 a[from] ... a[a.length - 1] 范围内最大硬币的位置”。但是,它不是这样做的。
-
是的,问题是使用 0 而不是 from 和使用 i
标签: java arrays selection-sort