有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不使用compareTo的java排序算法

我正在做一个家庭作业,要求我比较两个字符串并确定它们是否按字母顺序排列

我计划编写一个方法,该方法将两个字符串作为参数(字符串a、字符串b),并返回1、0或-1(因此,一个int),表示a>;b、 a<;b、 否则(0情况)

例如,比较(“boogie”、“orange”)将返回-1。因为,布吉<;橙色

到目前为止,我的代码是

public static int compare(String a, String b) {
    for (int i = 0; i < a.length(); i++) {
        for (int j = 0; j < b.length(); j++) {
            char cha = a.charAt(i);
            char chb = b.charAt(j);
            if (cha < chb) {
                return -1;
            } else if (cha > chb) {
                return 1;
            }
        }
        return 0;
    }
}

但是,我遇到了许多错误,无法找到修复错误的方法。我也很难找到一个代码来衡量一个词是否比另一个词长(这会影响字母顺序),有人能帮我调试代码并给我指出正确的方向吗

非常感谢


共 (2) 个答案

  1. # 1 楼答案

    您可以使用“-”运算符而不是“>;”来比较两个字符。 例如下面的例子

    public static int compare(String a, String b) {
       return  a.charAt(0) - b.charAt(0);
    }
    

    对你来说,是这样的

    public static int compare(char cha, char chb) {
        if (cha-chb < 0) {
             return -1;
         } else if(chb - cha > 0){
             return 1;
         } else if(chb - cha == 0){
             return 0;
         }
        return 0;
    }
    
  2. # 2 楼答案

    您不需要嵌套循环,因为您不想将一个字符串的每个字符与另一个字符串的每个字符进行比较

    您只需要一个循环:

    public static int compare(String a, String b)
    {
        int len = Math.min (a.length(),b.length());
        for (int i = 0; i<len; i++) {
            char cha = a.charAt(i);
            char chb = b.charAt(i);
            if (cha < chb) {
                return -1;
            } else if (cha > chb) {
                return 1; 
            }
        }
        if (a.length() < b.length())
            return -1;
        else if (a.length() > b.length())
            return 1;
        else
            return 0;
    }
    

    至于处理不同长度的字符串,如果您发现两个字符串中较短的字符串等于较长字符串的前缀,则如果a是较短字符串,则返回-1;如果b是较短字符串,则返回1(因为较短字符串应位于较长字符串之前)