我使用递归按字母顺序获取第一个字符串的java代码给出了错误的输出。我需要添加助手方法吗?

我使用递归按字母顺序获取第一个字符串的java代码给出了错误的输出。我需要添加助手方法吗?,java,recursion,Java,Recursion,我无法正确比较s1和s2。如果我将多个字符串添加到我的ArrayList,它似乎会在运行一次后停止。所以我缺少一个递归方法来帮助我的findminium方法 我需要提供代码来创建一个Tester类,但我现在只是尝试创建一个工作程序。感谢您的帮助。我确实需要对这个赋值使用递归,否则我会使用不同的路径 public class BigComp { // public static String s1; // public static String s2; publ

我无法正确比较
s1
s2
。如果我将多个字符串添加到我的
ArrayList
,它似乎会在运行一次后停止。所以我缺少一个递归方法来帮助我的
findminium
方法

我需要提供代码来创建一个
Tester
类,但我现在只是尝试创建一个工作程序。感谢您的帮助。我确实需要对这个赋值使用递归,否则我会使用不同的路径

    public class BigComp {
    // public static String s1;
    // public static String s2;

    public static void main(String[] args) {
    // String s1 = "badd"; //, "job", "any";
    // String s2 = "hat";//,"zFat","got";
    ArrayList<String> stringArray = new ArrayList<String>();
    stringArray.add("acc");
    stringArray.add("Dbc");
    stringArray.add("bac");
    // compareTo(s1,s2);
    // findMinimum(stringArray);
    System.out.println(findMinimum(stringArray));
  }

      public static int compareTo(String s1, String s2) {

    if(s1.charAt(0) < s2.charAt(0)) {
      return -1; // String s1 is alphabetically before s2
    }
    if(s1.charAt(0) > s2.charAt(0)) {
      return 1; // String s1 is alphabetically after s2
    }
    if(s1.charAt(0) == s2.charAt(0)) {
      if(s1.length()== 1 && s2.length() ==1) {
          return 0; // both strings being compared are identical
      }
      if(s1.length() == 1 && s2.length() > 1) {
          return -1; // s1 is before s2
      }
      if(s1.length() > 1 && s2.length()== 1) {
          return 1; // s2 is before s1
      }
    }
    return compareTo(s1.substring(1), s2.substring(1));

  } // end of compareTo method

    public static String findMinimum(ArrayList<String> stringArray) {

    String s1 = stringArray.get(0);
    int max = stringArray.size()-1;
    String s2 = stringArray.get(max);
    int temp = compareTo(s1, s2);

    // if(stringArray.size() == 1) {
    //     return stringArray.get(0);
    // }

    if(temp == 0) {
      stringArray.remove(max);
      return findMinimum(stringArray);
    }
    else if(temp == 1) {
      stringArray.remove(s1);
      return findMinimum(stringArray);
    }
    else {
      stringArray.remove(s2);
      return findMinimum(stringArray);
    }

  } // end findMinimum method

} // end of BigComp class
公共类BigComp{
//公共静态字符串s1;
//公共静态字符串s2;
公共静态void main(字符串[]args){
//字符串s1=“添加”/,“作业”,“任何”;
//字符串s2=“hat”/,“zFat”,“got”;
ArrayList stringArray=新的ArrayList();
stringArray.add(“acc”);
stringArray.add(“Dbc”);
stringArray.add(“bac”);
//比较(s1,s2);
//findminium(stringArray);
System.out.println(findminium(stringArray));
}
公共静态整数比较(字符串s1、字符串s2){
if(s1.字符(0)s2.字符(0)){
返回1;//字符串s1按字母顺序在s2之后
}
如果(s1.字符(0)=s2.字符(0)){
如果(s1.length()==1&&s2.length()==1){
返回0;//正在比较的两个字符串相同
}
如果(s1.length()==1&&s2.length()>1){
return-1;//s1在s2之前
}
如果(s1.length()>1&&s2.length()==1){
返回1;//s2在s1之前
}
}
返回compareTo(s1.子字符串(1),s2.子字符串(1));
}//compareTo方法的结尾
公共静态字符串findMinimum(ArrayList stringArray){
字符串s1=stringArray.get(0);
int max=stringArray.size()-1;
String s2=stringArray.get(最大值);
int temp=比较(s1,s2);
//if(stringArray.size()==1){
//返回stringArray.get(0);
// }
如果(温度==0){
stringArray.remove(最大值);
返回findminium(stringArray);
}
否则如果(温度==1){
stringArray.remove(s1);
返回findminium(stringArray);
}
否则{
stringArray.remove(s2);
返回findminium(stringArray);
}
}//结束findminium方法
}//BigComp类结束

您的代码将获得
java.lang.IndexOutOfBoundsException
,因为方法
findMinimum
没有停止递归的理由。您可以在方法
findminium
的开头添加此行:

if(stringArray.size()==1)返回stringArray.get(0);
.charAt
返回字符类型,这意味着它们将由ASCII码进行比较。也许您需要使用
compareTignoreCase

public static int compareTo(字符串s1、字符串s2){
返回s1.compareToIgnoreCase(s2);
}

我在代码中注释掉了这一点,因为我试图找出错误发生的地方。它仍然返回“Dbc”,但我需要按字母顺序排列的最小字符串。仍然获取compareTo方法的INdexOutOfBounds