我正在尝试编写一个程序来反转以负号开头的整数。例如,如果数字为-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);
}
}
答案 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) + "";