【问题标题】:Sorting algorithm without using compareTo不使用 compareTo 的排序算法
【发布时间】:2015-03-14 04:37:02
【问题描述】:

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

我打算编写一个方法,它将两个字符串作为参数,(String a, String b) 并返回 1、0 或 -1(所以,一个 int)表示 a > b,a

例如,比较 ("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;
    }
}

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

非常感谢。

【问题讨论】:

  • 如果您遇到错误,总是发布它们。不要让我们坐在这里猜测!
  • “我也很难找到一个代码来衡量一个词是否比另一个长(这会影响字母顺序)” ...length()?
  • 当您说两个单词之间的字母顺序时,您的意思是:每个单词的第一个字母?所有字母相互比较?现在,您只比较每个单词中的第一个字符,因为一旦匹配到 cha &gt; chbcha &lt; chb,它就会返回。如果两个单词相同,它现在也将返回 0。

标签: java


【解决方案1】:

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

你只需要一个循环:

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;
}

对于处理不同长度的字符串,如果你发现2个字符串中较短的那个等于较长字符串的前缀,如果a是较短的字符串,则返回-1,如果b较短,则返回1(因为较短的字符串应该在较长的字符串之前)。

【讨论】:

  • 字符可以用&lt;&gt;比较吗?
  • @Apurva 字符具有 0 到 2^16-1 之间的整数值,因此可以与 进行比较。
  • 是的,在java中你可以将字符与,=,==等进行比较,就像整数一样。
  • @CodeWhisperer 基于字典顺序 abcde
  • @Aify 不,它不会,因为 equals 还会迭代两个字符串的字符(假设它们的长度相等),所以你将运行一些逻辑两次。跨度>
【解决方案2】:

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

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;
}

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 2019-09-15
    • 2012-08-11
    • 1970-01-01
    • 2015-01-03
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多