我使用递归按字母顺序获取第一个字符串的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