Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在反转整数,但获取'StringIndexOutOfBoundsException'`_Java - Fatal编程技术网

Java 正在反转整数,但获取'StringIndexOutOfBoundsException'`

Java 正在反转整数,但获取'StringIndexOutOfBoundsException'`,java,Java,我正试图写一个程序来反转以负号开始的整数。例如,如果数字为-123,则输出应为-321。但我得到了: StringIndexOutOfBoundsException:字符串索引超出范围:4 一致: result += myString.charAt(i) + ""; 代码的逻辑有什么问题 public class ReverseInteger { public static void main(String[] args){ int x = -123;

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

StringIndexOutOfBoundsException:字符串索引超出范围: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);
    }
}

java中的
字符串
或数组的索引是基于零的。这意味着索引
0
是字符串中的第一个字符,
mystring.length()-1
是字符串中的最后一个字符
mystring.length()
超过了字符串的末尾

由于您在索引
mystring.length()
处访问数组,因此超出了数组的边界,因此出现了异常

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

像这样:

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

这是因为您正在使用

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) + "";
}

下面这一行似乎就是问题所在

result += myString.charAt(i) + "";
将其更改为:

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

您认为StringIndexOutOfBoundsException:字符串索引超出范围:4意味着什么?它应该是
i>=0
,但10分钟后仍会接受答案:)@pb2q@John您可以使用
i>0
i>=1
,但不能使用
i>=0
,因为您在查找符号时专门处理索引0。所以你不想碰循环中的索引0。哦,对不起,别担心!我做了
I>=1
,在这里犯了一个错误,说I>=0。再次抱歉,谢谢@PB2Q嘿,没问题@John。这是一个简单的概念,但可能需要很长时间才能自然实现