Java 写一个递归方法来比较两个字符串?

Java 写一个递归方法来比较两个字符串?,java,sorting,recursion,Java,Sorting,Recursion,可能重复: 我一直在处理递归问题,无法按字母顺序对任意两个字符串进行排序。以下是方法签名: int compareTo(String s1, String s2) 结果是: returnval 0表示s1>s2 以下是我的代码: package bonushw; public class Recursion { public void main (String[] args){ Recursion recurse = new Recursion(); Syst

可能重复:

我一直在处理递归问题,无法按字母顺序对任意两个字符串进行排序。以下是方法签名:

int compareTo(String s1, String 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));
    }
  }
package-bonushw;
公共类递归{
公共void main(字符串[]参数){
递归递归=新递归();
System.out.println(“值为:”+recurse.compareTo(“账单”、“账单”));
}  
公共整数比较(字符串s1、字符串s2){
如果(s1.length()==0){
返回0;
}
如果(s1.字符(0)s2.字符(0)){
返回1;
}
否则{
返回compareTo(s1.子字符串(1),s2.子字符串(1));
}
}
谢谢

这是不完整的,如果两个都为空怎么办,如果s2为空怎么办?

试试这个:

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
    }
}
类比较
{
公共静态整数比较(字符串s1、字符串s2)
{
int len=s1.length()0)
返回-1;
else if(len==0&&s2.length()>0)
返回1;
对于(int i=0;i
@AmitBhargava-我刚刚添加了我的代码,谢谢。你的代码有问题吗?有什么问题吗?compareTo(“,“Hello World”)的值应该是多少?@LouisWasserman-看起来不错吧?应该是
public static void main(String[]args)
(缺少
static
)好的,AKJ,是的,OP需要彻底检查OK我把它改为:`(s1.length()==0)`(s2.length()==0)`@ikechukwuokuchukwjr这仍然是错误的。你应该有这样一个条件:if(s1.length()==0&&s2.length()=0)返回0;else if(s1.length()==0&&s2.length()>0)返回-1;else if(s1.length()>0&&s2.length==0)返回1;仅供参考,而不是
s1.substring(1,s1.length())
只需编写
s1.substring(1)
。它是等效的,并且更易于阅读。for循环是不必要的,因为它将在第一次迭代后使用
return
语句退出。只需使用
s1.charAt(0)
s2.charAt(0)
并移除for-loop。谢谢您的提示@guillaume polet
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
    }
}