Java 制作我自己的s1.compareTo(s2)方法,而不使用其他方法

Java 制作我自己的s1.compareTo(s2)方法,而不使用其他方法,java,methods,compareto,Java,Methods,Compareto,我应该自己用比较法。这是说明书 其中s1和s2是字符串,b是整数类型,如果两个字符串相等,b将存储0;如果s1小于s2,b将存储负值;如果s1大于s2,b将存储正值。 我做的程序不起作用,我也不知道为什么,有一件事是,如果数组相等,程序就会失败,即使它们不相等,程序也不会起作用。 谢谢你的帮助 public class CompareCharMethod { public static void main(String[] args) { // TODO Aut

我应该自己用比较法。这是说明书

其中s1和s2是字符串,b是整数类型,如果两个字符串相等,b将存储0;如果s1小于s2,b将存储负值;如果s1大于s2,b将存储正值。

我做的程序不起作用,我也不知道为什么,有一件事是,如果数组相等,程序就会失败,即使它们不相等,程序也不会起作用。 谢谢你的帮助

public class CompareCharMethod {
    public static void main(String[] args) {
            // TODO Auto-generated method stub
        char[] s1 = new char[] {'a', 'p', 'p', 'l', 'e'};
        char[] s2 = new char[] {'o', 'r', 'a', 'n', 'g', 'e'};
        int answer = CompareTo(s1, s2);
        System.out.println(answer);
    }

    public static int CompareTo(char[] s1, char[]s2)
    {
        if (s1==s2) {
            return 0;
        } else {
            int i=0;
            do { 
                if (s1[i] <s2[i]) {
                    return -1;
                } else if (s1[i] >s2[i]) {
                    return 1;
                } else {
                    i++;
                }
            } while (s1[i]==s2[i]);
        }
        return 999;
    }
}
您可以尝试以下方法:

public static void main(String[] args) {
    String s1 = "apple";
    String s2 = "orange";
    int answer = myCompareTo(s1.toCharArray(), s2.toCharArray());
    System.out.println(answer);
}

public static int myCompareTo(char[] s1, char[]s2) {
    int len1 = s1.length;
    int len2 = s2.length;
    int lim = Math.min(len1, len2);
    char v1[] = s1;
    char v2[] = s2;

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}

这应该是你要找的,我把它解释为字典顺序

public static int CompareTo(char[] s1, char[]s2)
  {
      if (s1==s2)
        return 0;
      int n = s1.length>=s2.length ? s2.length : s1.length;
      for(int i=0;i<n;i++){
        if(s1[i]<s2[i])
          return -1;
        else if(s1[i]>s2[i])
          return 1;
      }
      if(s1.length==s2.length)
          return 0;
      return s1.length>s2.length ? 1 : -1;
  }

您似乎根本没有考虑字符串的长度。您还应该检查这一点,以确保索引不会超过字符串的结尾。此外,除非数组是完全相同的对象,否则方法永远不会返回0,即字符串相等。请注意,s1==s2比较的是数组引用,而不是实际内容。其次,您提到需要检查字符串是否相等。平等到底意味着什么?每一个的实际内容或长度?当你说它不起作用时,你是什么意思?请澄清一点,以便有人有足够的信息来帮助你。在尝试提出更多问题之前,请阅读。“不工作”对任何阅读你的问题的人来说都毫无用处。这意味着有些东西不起作用,或者你不会在这里提问。。使用step调试器可以非常快速轻松地回答您的问题。在使用StackOverflow之前,应始终尝试使用step调试器解决问题。不起作用,请帮助我不可接受。请在尝试回答更多问题之前阅读。请在尝试回答更多问题之前阅读。