【发布时间】:2016-01-03 07:39:03
【问题描述】:
我有一个整数数组,需要按升序排序。我必须使用compareTo。
我有一个问题的数组排序。最大的数首先出现在数组中;其余的按升序排列。
司机: 导入 java.util.Scanner;
public class Driver2 {
public static void main(String[] args) {
int prior,compareResult;
String task;
Task[] taskList = new Task[4];
int [] taskListPrior = new int[4];
Scanner scan = new Scanner(System.in);
System.out.print("Enter priority (between 1 & 10) for breakfast: ");
prior = scan.nextInt();
task = "eatBreakfast";
Task eatBreakfast = new Task(prior,task);
System.out.println("Breakfast priority is: " + eatBreakfast.getPriority());
taskList[0] = eatBreakfast;
taskListPrior[0] = eatBreakfast.getPriority();
System.out.print("Enter priority (between 1 & 10) for lunch: ");
prior = scan.nextInt();
task = "eatLunch";
Task eatLunch = new Task(prior,task);
System.out.println("Lunch priority is: " + eatLunch.getPriority());
taskList[1] = eatLunch;
taskListPrior[1] = eatLunch.getPriority();
System.out.print("Enter priority (between 1 & 10) for dinner: ");
prior = scan.nextInt();
task = "eatDinner";
Task eatDinner = new Task(prior,task);
System.out.println("Dinner priority is: " + eatDinner.getPriority());
taskList[2] = eatDinner;
taskListPrior[2] = eatDinner.getPriority();
System.out.print("Enter priority (between 1 & 10) for nap: ");
prior = scan.nextInt();
task = "haveNap";
Task haveNap = new Task(prior,task);
System.out.println("Nap priority is: " + haveNap.getPriority());
taskList[3] = haveNap;
taskListPrior[3] = haveNap.getPriority();
System.out.println("--------------");
System.out.println("Printing task names and priorities:");
for(int p = 0 ; p < taskListPrior.length ; p++)
{
System.out.println(taskListPrior[p] + " - " + taskList[p]);
}
System.out.print("Enter new priority (between 1 & 10) for nap: ");
prior = scan.nextInt();
haveNap.setPriority(prior);
System.out.println("New priority for nap is: " + haveNap.getPriority());
taskList[3] = haveNap;
taskListPrior[3] = haveNap.getPriority();
System.out.println("--------------");
System.out.println("Printing task names and priorities:");
for(int p = 0 ; p < taskListPrior.length ; p++)
{
System.out.println(taskListPrior[p] + " - " + taskList[p]);
}
Task tempTask;
int tempTaskPrior;
for(int current = 0 ; current < taskList.length ; current++)
{
for(int i = 1 ; i < (taskList.length) ; i++)
{
compareResult = (taskList[current]).compareTo(taskList[i]);
if(compareResult == 1){
tempTask = (taskList[i]);
tempTaskPrior = (taskListPrior[i]);
taskList[i] = (taskList[current]);
taskListPrior[i] = (taskListPrior[current]);
taskList[current] = tempTask;
taskListPrior[current] = tempTaskPrior;
}
}
}
System.out.println("Printing sorted list of task names and priorities:");
for(int p = 0 ; p < taskListPrior.length ; p++)
{
System.out.println(taskListPrior[p] + " - " + taskList[p]);
}
}
}
任务类: 公共类任务实现优先级,可比{ public int Priority,priorityQuery,priorityNum; 公共字符串任务,taskItem,fullTask; 任务taskName;
public Task(int priorityQuery, String taskQuery){
task = taskQuery;
if (priorityQuery >= minPriority && priorityQuery <= maxPriority)
prior = priorityQuery;
else
System.out.println("Out of valid range, task will have no priority");
}
public void setPriority(int priority)
{
if (priority >= minPriority && priority <= maxPriority)
prior = priority;
else
System.out.println("Out of valid range, task will have no priority");
}
public int getPriority()
{
return prior;
}
public String toString(){
taskItem = task;
return taskItem;
}
public Task getTaskName(){
return taskName;
}
public int compareTo(Task compTask){
if (this.getPriority() < compTask.getPriority())
return 1;
else if (this.getPriority() > compTask.getPriority())
return -1;
else
return 0;
}
}
实际上有两个并行数组,用于compareTo 方法的一个只包含整数。
【问题讨论】:
-
myList和myListPriority的类型是什么?你也可以添加java标签 -
所以“comapreTo”只对整数列表起作用。您的代码显示 myList... 上正在使用 compareTo() 方法,这表明 Integer 对象数组(不是 int[ ] )。然后你有 tempTask = myList[i];那么你是说 tempTask 也是 Integer 类型的吗?如果您发布一些实际运行的代码,您将更有可能获得答案。
-
另外......你的 if( result == 1 ) 逻辑没有这样做。您需要处理结果 == 0、结果 0。您是否编写了自己的 compareTo() 方法?或者您正在使用 Java 通过 Integer 类提供的那个? (假设您的描述是准确的,并且您实际上并没有做类似 task1.compareTo(task2) 之类的事情;您没有发布足够的代码让我知道实际发生了什么)。
-
我已按要求添加了完整代码...
-
2 个问题:(1)为什么要使用单独的优先级列表,因为 Task 类已经包含优先级? (2) 为什么不使用静态数组方法: public static
void sort(T[] a, Comparator super T> c) (使用外部比较器)或 sort(Object[] a) (带有内部比较器)?