java的recursion的简单问题

Examples:indexOf('e',"recurse")shouldreturn1,becausethefirstoccurrenceof'e'in"recurse... Examples:
indexOf('e', "recurse") should return 1, because the first occurrence of 'e' in "recurse" has an index of 1.
indexOf('s', "recurse") should return 5, because the first occurrence of 's' in "recurse" has an index of 5.
indexOf('x', "recurse") should return -1, because there is no occurrence of 'x' in "recurse".

这是我分别的写的两个method:
1.
public static int indexOf(char ch, String str) {
if (str == null || str.equals("")) {
return -1;
}
if (str.charAt(0) == ch) {
return 0;
}
int index1 = indexOf(ch, str.substring(0, str.length()-1));
if (str.charAt(str.length()-1) != ch) {
return index1;
} else {
int index2 = str.length() - 1;
return index2;
}
}
但第一个这个method当遇到第二次已经出现过的字母时,就出错了,比如apple里有两个p,那么最后p的话结果肯定不对
2.
public static int indexOf1(char ch, String str) {
if (str == null || str.equals("")) {
return -1;
}
if (str.charAt(0) == ch) {
return 1;
}
int index1 = indexOf1(ch, str.substring(1));
return index1;
}
这个method没有上面的问题,但是还比如apple里,如果ch是x的话,不会return-1,只要是不在str里的ch最后都会return 6。

希望大家能帮我修改一下这两个method,不能再用别的build-in method了,例如indexof等等。

谢谢!
展开
 我来答
yjl01long
2012-11-14 · TA获得超过329个赞
知道答主
回答量:155
采纳率:100%
帮助的人:61.7万
展开全部
第一个方法根本不能达到你所期望的支出每个字符在字符串的位置,找到相对应的位置,按照的顺序不固定,漏洞太多不适合用递归的方法,如果非要用那就等高手吧。

第二个方法是判断该字符是否存在于字符串中,存在输出1,不在则输出-1,经判断没有问题。更不会出现 6 这么经典又不知所云的数字。

而 jamxval 大师的方法很巧妙,可以找到相对应的位置,是按照从左往右的顺序,但是重复的字符仍然不能区分,没办法确实很难实现,还一个漏洞是ch如果是字符串之外的字符,它的返回的值是被匹配的字符串最后一位的值。

总结:楼主出的题很坑爹,没描述明白你的意图。
追问
意图不是在一上来的example里提到了吗。。。。
追答
递归遍历想区分相同的字节,那就放进集合里吧,用key来区分如:,区分两个e。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jamxval
2012-11-14 · TA获得超过6821个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1396万
展开全部
你在递归时,因为 substring(1),位置相对原来的字符串偏移了+1,所以最后的结果是 return 1 + index1;

public static int indexOf1(char ch, String str) {
if (str == null || str.equals("")) {
return -1;
}
if (str.charAt(0) == ch) {
return 0;
}
int index1 = indexOf1(ch, str.substring(1));
return index1 + 1;
}
追问
谢啦, 但是这个的话,比如我char写的x,但不在str里,可是也不会return-1,这个怎么修改一下呢?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tonytan0328
2012-11-15
知道答主
回答量:5
采纳率:0%
帮助的人:2.5万
展开全部
why dont you go to piazza instead of baidu
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式