使用对象的二次方法排序,但在if语句中的比较时出现“compareTo”错误

时间:2014-06-05 20:31:50

标签: java arrays string sorting

public static void quadraticSort(Message[] m)
{
  for (int i = 0; i < m.length; i +=1)
    {
      for (int j = 0; j < m.length; j += 1)
        {
          int k = m[i].compareTo(m[j]);
          if (k < 0)
          {
            swap(s, i, j);
          }
        }
    }
} 

消息类

enum Subject {PERSONAL, FAMILY, WORK, GENERAL}
//Q4 Task 5
public class Message
{

    String    messageText;
    User from;
    User to;
    Subject subject;
    public Message(Subject subject, User from, User to, String messageText)
    {
        this.subject        = subject;
        this.from           = from;
        this.to             = to;
        this.messageText    = messageText;
    } 

    public void displayMessage()
    {
        String nameFrom = from.firstName;
        String nameTo   = to.firstName;
        System.out.println("Message subject: " + subject+ " "+ nameFrom + " says \""+messageText + "\" to " + nameTo);
    }

    public void displayMessageContent()
    {
        System.out.println(messageText);
    }
}

我的问题是关于compareTO我似乎无法让它发挥作用。它不断弹出找不到符号比较(消息)

我这是一个完全的菜鸟,所以任何帮助都会非常感激。 我对时间的问候。

这是家庭作业的问题,也许它会清除这个区域

在MessageSort中编写一个方法来对消息数组进行排序。

  • 签名:public static void sortMessages(Message [] messages)
  • 使用此分配中开发的排序算法对列表进行排序
  • 通过在提供的TestMessaging类的实例上调用sortArrayMessages来测试代码(图6)

2 个答案:

答案 0 :(得分:1)

您没有compareTo方法

将您的班级更改为:

public class Message implements Comparable { 
....

然后在你的类中实现compareTo()方法。

答案 1 :(得分:0)

public static void quadraticSort(Message[] m)
{
    for (int i = 0; i < m.length; i += 1)
    {
        for (int j = i; j < m.length; j += 1)
        {
            String a = m[i].messageText;
            String b = m[j].messageText;
            int k = b.compareTo(a);
            if( k < 0)
            {
                swap(m, i, j);
            }
        }
    }
}

private static void swap(Message[] arMsg, int to, int from)
{
    Message temp = arMsg[to];
    arMsg[to] = arMsg[from];
    arMsg[from] = temp;
}

只有messageText部分是一个String,这段代码会修复你的compareTo只会考虑messageText。如果你想看看,我已经包含了我的交换。