2012-05-03 54 views
-2

可能重复:
Using Recursion To Compare Strings To Determine Which Comes First Alphabetically Java编写一个递归方法来比较两个字符串?

我卡在这个递归问题按字母顺序排序任何两个字符串。这里的方法签名:

int compareTo(String s1, String s2) 

它yeilds:

returnval <0意味着s1 < s2

returnval ==0意味着s1 == s2

returnval >0意味着s1 > s2

这里是我的代码:

package bonushw; 

public class Recursion { 

    public void main (String[] args){ 
     Recursion recurse = new Recursion(); 
     System.out.println("value is: " + recurse.compareTo("bill","bill")); 
    } 

    public int compareTo (String s1, String s2) { 

    if(s1.length() == 0){ 
     return 0; 
    } 
    else if (s1.charAt(0) < s2.charAt(0)){ 
     return -1; 
    } 
    else if (s1.charAt(0) > s2.charAt(0)) { 
     return 1; 
    } 
    else { 
     return compareTo(s1.substring(1), s2.substring(1)); 
    } 
    } 

感谢

+0

@AmitBhargava - 我只是说我的代码,感谢 –

+1

是否与你的代码有问题吗?它有什么问题? –

+0

'compareTo(“”,“Hello World”)的值应该是什么? – emory

回答

3
if(s1.length() == 0){ 
     return 0; 
    } 

这是不完整的,如果两者都为空,如果S2是什么空是什么?

+0

好点AKJ,是OP需要彻底检查, – Coffee

+0

好吧,我改变它:'(s1.length()== 0)|| (s2.length()== 0)' –

+3

@IkechukwuOkechukwuJr这仍然不正确。你应该有这样的条件:if(s1.length()== 0 && s2.length()== 0)return 0; else if(s1.length()== 0 && s2.length()> 0)return -1; else if(s1.length()> 0 && s2.length == 0)return 1; –

-1

试试这个:

class Compare 
{ 
    public static int compareTo(String s1, String s2) 
    { 
     int len = s1.length() < s2.length() ? s1.length() : s2.length(); 

     if (len == 0 && s1.length() > 0) 
      return -1; 
     else if (len == 0 && s2.length() > 0) 
      return 1; 

     for (int i = 0; i < len; ++i) 
     { 
      int v1 = s1.charAt(i); 
      int v2 = s2.charAt(i); 

      if (v1 == v2) 
       return compareTo(s1.substring(1, s1.length()), 
           s2.substring(1, s2.length())); 
      else 
       return v1 - v2; 
     } 

     return 0; 
    } 

    public static void main(String[] args) 
    { 
     System.out.println(compareTo("", ""));  // 0 
     System.out.println(compareTo("a", "a"));  // 0 
     System.out.println(compareTo("ab", "a"));  // -1 
     System.out.println(compareTo("a", "ab"));  // 1 
     System.out.println(compareTo("abc", "abc")); // 0 
    } 
} 
+0

只是FYI,而不是's1.substring(1,s1.length())'简单地写's1.substring(1)'。这是等同的,更简单的阅读。 –

+0

您的for循环是不必要的,因为它会在第一次使用'return'语句迭代后退出。只需使用's1.charAt(0)'和's2.charAt(0)'并移除for循环。 –

+0

感谢提示@ guillaume-polet – cadizm