java - 将插入排序应用于对象数组
问题描述
我正在尝试将插入排序应用于对象数组,但我的 else if 从未编译并说“错误的操作数类型”。
只是想知道我是否需要制定一个非常具体compareTo
的方法,或者是否有更好的方法来比较插入排序方法中的对象数组。
编辑:
所以这是我尝试使用我的compareTo
方法并编译但我null pointer exception
在else if
. 为什么?
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
类必须实现Camparable
接口才能使其正常工作。
推荐阅读
- android - 从代码中添加联系人后,phoneBook 在 android 中的句点 (.) 之后附加空格
- android - 如果已经给出输入数字属性,如何在软键盘中启用操作按钮?
- javascript - 使用数据表打开模式
- json - Json 通过 API 到 Elasticsearch
- python - 我需要帮助理解这段代码中的意外依赖
- android - java.io.IOException:流已关闭 - AndroidStudio
- c# - 如何将 Asp.Nets 数据库与我自己的上下文连接?
- css - 嵌入:将样式应用于 ng-content
- sql - SQL Server:批量插入到链接服务器
- vue.js - 将数据传递给 vue 实例到所有组件 vuejs rails