嗨大家我正在学习或试图学习如何使用compareTo()..我有一个简单的类来实现它,但是在相反的顺序中,我想有人可以指出显而易见的对我来说,因为我似乎总是想念它。我该如何扭转这种局面。 这是我的简单例子。
import java.util.*;
public class H283
{
public static void main(String args[])
{
Task[] tasks = new Task[4];
tasks[0] = new Task("Homework");
tasks[0].setPriority(7);
tasks[1] = new Task("Eat lunch");
tasks[1].setPriority(Priority.MIN_PRIORITY);
tasks[2] = new Task("Attend class");
tasks[2].setPriority(Priority.MAX_PRIORITY);
tasks[3] = new Task("Ned's project");
tasks[3].setPriority(4);
Arrays.sort(tasks);
System.out.println("\n TO-DO\n---------");
for (int i = 0; i < tasks.length; i++)
System.out.println(tasks[i].getName() + " \tpriority: " + tasks[i].getPriority());
}
}
interface Priority
{
static final int MED_PRIORITY = 5;
static final int MAX_PRIORITY = 10;
static final int MIN_PRIORITY = 1;
//-----------------------------------------------------------------
// Sets the object's priority level.
//-----------------------------------------------------------------
public void setPriority (int value);
//-----------------------------------------------------------------
// Returns the object's priority level.
//-----------------------------------------------------------------
public int getPriority();
}
class Task implements Priority, Comparable<Task>
{
String name;
private int priority;
//-----------------------------------------------------------------
// Sets up this task with a medium priority level.
//-----------------------------------------------------------------
public Task (String taskName)
{
name = taskName;
priority = MED_PRIORITY;
}
//-----------------------------------------------------------------
// Returns this task's name.
//-----------------------------------------------------------------
String getName()
{
return name;
}
//-----------------------------------------------------------------
// Sets this task's priority level.
//-----------------------------------------------------------------
public void setPriority (int value)
{
priority = value;
}
//-----------------------------------------------------------------
// Returns this task's priority level.
//-----------------------------------------------------------------
public int getPriority()
{
return priority;
}
public int compareTo( Task other )
{
//here is where i'd like to reverse the order
int thePriority = getPriority()-other.getPriority();
if ( thePriority != 0 )
return thePriority;
else
return getPriority()-other.getPriority();
}
}
任何建议都很棒......谢谢
答案 0 :(得分:0)
public int compareTo( Task other ) {
//here is where i'd like to reverse the order
// Simply reverse the order of your subtraction
int thePriority = other.getPriority()-getPriority();
if ( thePriority != 0 )
return thePriority;
else
return getPriority()-other.getPriority();
}
只需颠倒减法的顺序就是一种选择。或者你可以确切地保留你拥有的东西并且只是否定它。
public int compareTo( Task other ) {
//here is where i'd like to reverse the order
int thePriority = getPriority()-other.getPriority();
if ( thePriority != 0 )
return -thePriority; // Return negated priority
else
return getPriority()-other.getPriority();
}
此外,您的其他声明目前返回与您的if完全相同的内容。除非你想要处理其他同样优先级排序任务的方法(例如,按名称排序),否则你可以轻松地省去整个if / else语句并让compareTo()方法成为一行。
public int compareTo( Task other ) { // Clean and simple!
return -(getPriority()-other.getPriority());
}
在这种情况下,当你实现自己的compareTo()时,你并没有那么多了解compareTo()。因此,您可以随意返回。