我正在尝试创建一个重写的compareTo方法,它将比较两个字符串值和排序,它首先按字母顺序排列,我试图以递归方式实现它,但我遇到了返回和if语句的问题:
public class Recursion{
private static int index = 0;
public static int compareTo(String string1,String string2){
char character1 = string1.toLowerCase().charAt(index);
char character2 = string2.toLowerCase().charAt(index);
if (character1 < character2 || string1.length() > string2.length()){
System.out.println("String 1 comes after String 2");
return -1;
}
else if(character1 > character2 || string1.length() < string2.length()){
System.out.println("String 1 comes before String 2");
return 1;
}
if (string1.length() == string2.length()){
index ++;
System.out.println("Index is " +index);
return 0;
return compareTo(string1,string2);
}
我在底部的recursive if语句中遇到编译器错误“Unreachable statement”,以及来自同一if块的“missing return statement”。
答案 0 :(得分:1)
“无法访问的声明”
因为在if条件中你返回0所以,后续
return compareTo(string1,string2);
无法访问。
if (string1.length() == string2.length()){ index ++; System.out.println("Index is " +index); return 0; return compareTo(string1,string2); }
“缺少退货声明”
因为,您没有为所有案例返回值。如果下面的陈述是假的怎么办?
if(string1.length()== string2.length()){
我不认为你的算法是正确的。请查看以下示例供您参考。
private static int index = 0;
public static int compareTo(String string1,String string2){ // char character1 = string1.toLowerCase()。charAt(index); //字符串索引超出范围:可能发生错误 // char character2 = string2.toLowerCase()。charAt(index); //字符串索引超出范围:可能发生错误
char character1, character2;
int maxIndex=-1;
if(string1.length()<=string2.length()) {
maxIndex=string1.length()-1;
} else {
maxIndex=string2.length()-1;
}
if(index<=maxIndex) {
character1 = string1.toLowerCase().charAt(index);
character2 = string2.toLowerCase().charAt(index);
if (character1!=character2) {
return character1-character2;
} else {
if(index==maxIndex) {
return string1.length()-string2.length();
} else {
++index;
return compareTo(string1,string2);
}
}
} else {
return string1.length()-string2.length();
}
}
答案 1 :(得分:0)
关于您获取无法访问声明的原因:
return 0
return compareTo(string1,string2) <<<<< this line is unreachable because of the above return 0;
关于您获得遗失的退货声明的原因: 如果三个块中没有一个条件为真,那么在它们之外没有返回语句,因此编译器正在抱怨这个丢失的返回。 你必须从最后的一切中提出最后一句话。
关于算法..我认为你的想法是一个完全错误而且无效。试着用其他算法重写。
if (character1 < character2 || string1.length() > string2.length()){
如果char1&lt;
为什么你返回-1 char2或string1的字符数少于string2?我无法弄清楚字符串的大小与按字母顺序排序有什么关系。