java递归函数返回值求助

String deal(String s1, String s2)
{
if(s1 != null)
{
if(contact(s1.charAt(s1.length() - 1)) == 1)
{
s1 += s2;
return s1;
}
else
{
s1 = s1.substring(0, s1.length() - 1);
deal(s1, s2);
}
}
return s1;
}

int contact(char ch)
{
if(Character.isDigit(ch) || ch == *(* || ch == *)* || ch == *.*)
return 1;
if(ch == *-* || ch == *+*)
return 2;
return 0;
}

String str = deal("800", "*");
这样就返回的是800*
如果String str = deal("800-", "*");
返回的是800,不是800*
是不是意思就是返回的是第一次的返回值?
如果我想得到800*怎么修改,求帮忙!谢谢了

是的,这段代码中的递归调用只会返回第一次的返回值。如果你想得到800*的结果,可以修改代码,使得第二次递归调用的结果被正确地返回。具体地,你可以在第二次递归调用结束之后,将结果返回到上一层递归调用,并在第一次递归调用结束之后将结果返回。修改后的代码如下:
String deal(String s1, String s2) { if(s1 != null) { if(contact(s1.charAt(s1.length() - 1)) == 1) {
s1 += s2; return s1;
} else {
s1 = s1.substring(0, s1.length() - 1);
s1 = deal(s1, s2); // 递归调用并将返回值赋值给s1
return s1; // 将结果返回到上一层递归调用
}
} return s1;
}

int contact(char ch) { if(Character.isDigit(ch) || ch == '*' || ch == '.' || ch == '-') return 1; if(ch == '+' || ch == '/') return 2; return 0;
}String str = deal("800-", "*"); // 返回的结果为800*
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-04
public static String deal(String s1, String s2)
{
if(s1 != null)
{
if(contact(s1.charAt(s1.length() - 1)) == 1)
{
s1 += s2;
return s1;
}
else
{
s1 = s1.substring(0, s1.length()-1 );
String a = deal(s1, s2);
if(a!=""||!a.equals("")){
return a;
}
}
}

这样改就成了追问

这个肯定不行,return在if 或else中,if外面没有会报错说没有返回值的

这一定会返回第一个的 ,我用另一个方法做了

请问另一个问题:String s = null时 输出s时为什么是null 不应该什么都没有吗
如果用String s = “” 那么“”+s的字符个数是多少啊
谢谢了

追答

那个是可以的 我给你代码粘贴到Eclipse里测试了 只不过我没有给你完全代码 只是想让你把
String deal(String s1, String s2)
{
if(s1 != null)
{
if(contact(s1.charAt(s1.length() - 1)) == 1)
{
s1 += s2;
return s1;
}
else
{
s1 = s1.substring(0, s1.length() - 1);
deal(s1, s2); //这块改成String a = deal(s1, s2);
//if(a!=""||!a.equals("")){
//return a;
//}}
}
return s1;
}

你的第二个问题
String s = null; 你给他定义这书数组为空了 所以打印的时候就会打印出null(代表没有任何值)
""+s字符的个数是多少你可以自己测试一下
String s=null;
String ss = ""+s;
System.out.println(ss.length());//ss.length()代表ss这个字符串的长度
测试结果为4

本回答被网友采纳
第2个回答  2014-11-04
使用eclipse来单步调试运行 吧
相似回答