0

程序返回一个字符串,得到两个字符串的互换字符;即 string s1 = "aceg" string s2 = "hfdb" 结果是 "abcdefgh"(两个字符串的长度总是相同的;

好吧,我是这样处理的:

public class Eserc2 {

    public static String ricorsiveString(String s1, String s2) {

        if(s1.length() == 0 && s2.length() == 0) {
            return "";
        } else {

            char c = s1.charAt(0);
            char b = s2.charAt(s2.length()-1);

            String s = String.valueOf(c) ;
            String t = String.valueOf(b) ;
            String tot = s+t ;

            return tot + ricorsiveString(s1.substring(1),s2.substring(s2.length()));
        }
    }

    public static void main(String[] args) {

        String a = "aceg";
        String b = "bdfh";
        ricorsiveString(a,b);

    }
}

问题是当我编译 pc 时发现异常:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.charAt(String.java:658)
    at eserc2.Eserc2.ricorsiveString(Eserc2.java:20)
    at eserc2.Eserc2.ricorsiveString(Eserc2.java:26)
    at eserc2.Eserc2.main(Eserc2.java:34)

你能帮我吗???

4

4 回答 4

1
 if(s1.length() == 0 && s2.length() == 0) {

应该

 if(s1.length() == 0 || s2.length() == 0) {
于 2013-02-22T18:03:57.493 回答
1

问题是 ifs2为空但不是s1

if(s1.length() == 0 && s2.length() == 0)

将为假(s1不为空),但这一行:

s1.length() == 0 && s2.length() == 0

将尝试访问位置 -1 的字符。

注意:如果你一步一步调试你的程序,你会在比你输入问题更短的时间内发现问题!

于 2013-02-22T18:04:23.437 回答
1

这条线没有做你想做的事(s2.substring(s2.length()) 调用总是给你一个长度为 0 的字符串)

return tot + ricorsiveString(s1.substring(1),s2.substring(s2.length()))

它应该替换为

return tot + ricorsiveString(s1.substring(1),s2.substring(0, s2.length() - 1));

作为一种设计选择,您还应该测试传递的字符串是否符合您的前提条件,即它们必须具有相同的长度。或者,将 && 测试更改为 || (正如其他人所建议的那样)将使代码适用于不同长度的字符串。

于 2013-02-22T18:09:18.253 回答
0

你说的条件不正确,应该是:

if(s1.length() == 0 || s2.length() == 0) {

因为如果任何一个可变长度为零,则代码不应执行。

于 2013-02-22T18:08:27.380 回答