Java 写一个递归方法来比较两个字符串?
可能重复:Java 写一个递归方法来比较两个字符串?,java,sorting,recursion,Java,Sorting,Recursion,可能重复: 我一直在处理递归问题,无法按字母顺序对任意两个字符串进行排序。以下是方法签名: int compareTo(String s1, String s2) 结果是: returnval 0表示s1>s2 以下是我的代码: package bonushw; public class Recursion { public void main (String[] args){ Recursion recurse = new Recursion(); Syst
我一直在处理递归问题,无法按字母顺序对任意两个字符串进行排序。以下是方法签名:
int compareTo(String s1, String 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));
}
}
package-bonushw;
公共类递归{
公共void main(字符串[]参数){
递归递归=新递归();
System.out.println(“值为:”+recurse.compareTo(“账单”、“账单”));
}
公共整数比较(字符串s1、字符串s2){
如果(s1.length()==0){
返回0;
}
如果(s1.字符(0)s2.字符(0)){
返回1;
}
否则{
返回compareTo(s1.子字符串(1),s2.子字符串(1));
}
}
谢谢
这是不完整的,如果两个都为空怎么办,如果s2为空怎么办?试试这个:
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
}
}
类比较
{
公共静态整数比较(字符串s1、字符串s2)
{
int len=s1.length()0)
返回-1;
else if(len==0&&s2.length()>0)
返回1;
对于(int i=0;i
@AmitBhargava-我刚刚添加了我的代码,谢谢。你的代码有问题吗?有什么问题吗?compareTo(“,“Hello World”)的值应该是多少?@LouisWasserman-看起来不错吧?应该是public static void main(String[]args)
(缺少static
)好的,AKJ,是的,OP需要彻底检查OK我把它改为:`(s1.length()==0)`(s2.length()==0)`@ikechukwuokuchukwjr这仍然是错误的。你应该有这样一个条件:if(s1.length()==0&&s2.length()=0)返回0;else if(s1.length()==0&&s2.length()>0)返回-1;else if(s1.length()>0&&s2.length==0)返回1;仅供参考,而不是s1.substring(1,s1.length())
只需编写s1.substring(1)
。它是等效的,并且更易于阅读。for循环是不必要的,因为它将在第一次迭代后使用return
语句退出。只需使用s1.charAt(0)
和s2.charAt(0)
并移除for-loop。谢谢您的提示@guillaume polet
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
}
}