-1

重複の可能性:
再帰を使用して文字列を比較し、アルファベット順で最初に来るものを判別する Java

任意の 2 つの文字列をアルファベット順に並べ替えるために、この再帰問題に悩まされています。メソッドのシグネチャは次のとおりです。

int compareTo(String s1, String s2)

次のようになります。

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

ありがとう

4

2 に答える 2

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

これは不完全です。両方が空の場合、s2 が空の場合はどうでしょうか?

于 2012-05-03T17:30:17.867 に答える
-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
    }
}
于 2012-05-03T17:53:01.093 に答える