将插入排序应用于对象数组
Applying insertion sort to arrays of objects
我正在尝试将插入排序应用于对象数组,但我的 else if 从不编译并说 "bad operand types"。
只是想知道我是否需要制作一个非常具体的 compareTo
方法,或者是否有更好的方法来比较插入排序方法中的对象数组。
编辑:
所以这是我尝试使用我的 compareTo
方法并且它编译但我在 else if
上得到一个 null pointer exception
。为什么?
public static void insertElement(WordClass[] Words, int next)
{
WordClass value = Words[next];
int i = next;
while(true)
{
//
if(i == 0)
{
Words[0] = value;
break;
}
else if(Words[i-1].getStr().compareTo(value.getStr()) <= 0)
{
Words[i] = value;
break;
}
else
{
Words[i] = Words[i-1];
i--;
}
}
}
public static void insertionSort(WordClass[] Words)
{
for(int i = 1; i< Words.length; i++)
{
insertElement(Words, i);
}
}
//in WordClass
public int compareTo(WordClass w) //makes WordClass comparable
{
return getStr().compareTo(w.getStr());
}
对于对象类型,您应该始终使用 campareTo
而不是 ==
或 <=
运算符,除非您想比较两个对象变量以查看它们是否都指向同一个对象。
此外,您的 WordClass
class 必须实现 Camparable
接口才能使其正常工作。
我正在尝试将插入排序应用于对象数组,但我的 else if 从不编译并说 "bad operand types"。
只是想知道我是否需要制作一个非常具体的 compareTo
方法,或者是否有更好的方法来比较插入排序方法中的对象数组。
编辑:
所以这是我尝试使用我的 compareTo
方法并且它编译但我在 else if
上得到一个 null pointer exception
。为什么?
public static void insertElement(WordClass[] Words, int next)
{
WordClass value = Words[next];
int i = next;
while(true)
{
//
if(i == 0)
{
Words[0] = value;
break;
}
else if(Words[i-1].getStr().compareTo(value.getStr()) <= 0)
{
Words[i] = value;
break;
}
else
{
Words[i] = Words[i-1];
i--;
}
}
}
public static void insertionSort(WordClass[] Words)
{
for(int i = 1; i< Words.length; i++)
{
insertElement(Words, i);
}
}
//in WordClass
public int compareTo(WordClass w) //makes WordClass comparable
{
return getStr().compareTo(w.getStr());
}
对于对象类型,您应该始终使用 campareTo
而不是 ==
或 <=
运算符,除非您想比较两个对象变量以查看它们是否都指向同一个对象。
此外,您的 WordClass
class 必须实现 Camparable
接口才能使其正常工作。