反转整数但得到`StringIndexOutOfBoundsException`

时间:2015-07-25 19:37:43

标签: java

我正在尝试编写一个程序来反转以负号开头的整数。例如,如果数字为-123,则输出应为-321。但我得到了:

StringIndexOutOfBoundsException: String index out of range: 4

排队:

result += myString.charAt(i) + "";

代码的逻辑有什么问题?

public class ReverseInteger {

    public static void main(String[] args){

        int x = -123;
        String myString = Integer.toString(x);
        String result = "";

        if(myString.charAt(0) == '-'){
            char sign = myString.charAt(0);
            for(int i = myString.length(); i > 1; i--){
                result += myString.charAt(i) + "";
            }
            result = sign + "" + result;
        }

        System.out.println(result);
    }
}

3 个答案:

答案 0 :(得分:2)

在java中为String或数组建立索引从零开始。这意味着索引0是字符串中的第一个字符,mystring.length() - 1是字符串中的最后一个字符。 mystring.length() 超过字符串的结尾

由于您正在索引mystring.length()访问数组,因此超出了数组的范围,因此异常。

您希望在索引mystring.length() - 1处开始循环。此外,您还需要继续索引1,而不是像循环中那样排除该索引。

像这样:

for (int i = myString.length() - 1; i > 0; i--)

答案 1 :(得分:0)

这是因为你正在使用

for(int i = myString.length(); i > 1; i--){
    result += myString.charAt(i) + "";
}

String.length()返回从1到X的长度.0表示空字符串。

你需要添加-1

for(int i = myString.length() - 1; i > 0; i--){
   result += myString.charAt(i) + "";
}

答案 2 :(得分:0)

以下行似乎是问题

result += myString.charAt(i) + "";

将其更改为:

result += myString.charAt(i-1) + "";