回文计划输出超出范围

时间:2014-03-28 14:48:49

标签: java

我对编程非常陌生。你能告诉我为什么输出:

  

字符串索引超出范围:-1

class Palindrome {

    public static String reverse(String s) {
        if (s == "") {
            return s;
        }
        else {
            return reverse(s.substring(1,s.length())) + s.charAt(0);
        }
    }

    public static void main(String args[]) {
        System.out.print(reverse("galskjdf"));
    }
}   

3 个答案:

答案 0 :(得分:1)

因为你正在以错误的方式进行字符串比较=>递归不会停在有效点。替换这个:

s == ""

用这个:

"".equals(s)

编辑嗯,看起来需要证据,这里是:http://ideone.com/TWm5U8

答案 1 :(得分:1)

使用

class Palindrome {
  public static String reverse(String s) {
    if ("".equals(s)) {
      return s;
    } else {
      return reverse(s.substring(1,s.length())) + s.charAt(0);
  }
}

  public static void main(String args[]) {
    System.out.print(reverse("galskjdf"));
  }
}   

请参阅How do I compare strings in Java?Reverse a string in Java也可能会有所帮助(即使您可能已将上述代码作为编程练习,但通常会使用现有工具并不会有任何损害对于这种事情。)

使用

的原因
"".equals(s)

而不是

s.equals("")

如下:如果snull,后者将抛出NullPointerException(因为您尝试在null上调用方法),而前者仍然可以正常工作,因为你在"适当的"字符串,另请参阅Gracefully avoiding NullPointerException in Java但是,我还记得有些人批评这种方法,因为这可能会让你错过s null当它不应该是{{1}}的事实。你应该明确检查处理那种情况。)

答案 2 :(得分:0)

使用此功能:

public static String reverse(String s) {
    if (s == null || s.length() <= 1) {
        return s;
    } else {
        return reverse(s.substring(1)) + s.charAt(0);
    }
}