2015-03-13 64 views
2

我正在做一个家庭作业,需要我比较两个字符串,并确定它们是否按字母顺序排列。我打算写一个方法,将采取两个字符串作为参数(字符串a,字符串b)并返回1,0或-1(所以,一个int)信号是否a> b,< b或其他情况(0情况)。排序算法没有使用compareTo

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

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

非常感谢提前。

+1

如果您收到错误,**总是**发布它们。不要让我们坐在这里猜猜! – tnw 2015-03-13 19:41:49

+2

“我也很难找到一个代码来衡量,如果一个单词比另一个长(这会影响字母顺序)”...长度()? – Tetramputechture 2015-03-13 19:42:23

+0

当你说这两个单词之间的字母顺序是什么意思:每个单词的第一个字母?所有字母相互比较?现在你只比较每个单词中的第一个字符,因为只要你有一个匹配'cha> chb'或'cha 2015-03-13 19:43:39

回答

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

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

+0

可以通过'<' or '>'比较字符吗? – Apurva 2015-03-13 19:45:59

+0

@Apurva字符的整数值介于0和2^16-1之间,因此它们可以与< or >进行比较。 – Eran 2015-03-13 19:49:06

+0

是的,在Java中,您可以将字符与<,>,<=,> =,==等进行比较,就像Integers一样。 – 2015-03-13 19:49:34

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