我正在编写一个可以反转2个4位数字的程序,我写了一个方法来完成它。项目构建中没有错误,但我得到"字符串索引超出范围:-3"当我试图运行它。我对编程很新,我不知道我做错了什么。
以下是代码:
public static void main(String[] args)
{
int num1 = 1;
int num2 = 1;
Scanner console = new Scanner(System.in);
while (num1 <1000 || num1 > 9999)
{
System.out.println("Please enter a positive 4 digit number");
num1 = console.nextInt();
}
String numString1 = Integer.toString(num1);
while (num2 <1000 || num2 > 9999)
{
System.out.println("Please enter another positive 4 digit number");
num2 = console.nextInt();
}
String numString2 = Integer.toString(num2);
int numReverse1 = stringReverse(numString1);
int numReverse2 = stringReverse(numString2);
System.out.println(numReverse1 + numReverse2);
System.out.println("The product of your 2 reversed numbers is: " + (numReverse1 * numReverse2));
}
public static int stringReverse (String numString)
{
String c1c2c3 = numString.substring(4);
String c2c3c4 = numString.substring(1);
String c1c2 = c1c2c3.substring(3);
String c3c4 = c2c3c4.substring(1);
String c1 = c1c2.substring(2);
String c2 = c1c2.substring(1);
String c3 = c3c4.substring(2);
String c4 = c3c4.substring(1);
String numStringReverse = c4 + c3 + c2 + c1;
int reversedString = Integer.parseInt(numStringReverse);
return reversedString;
}
}
答案 0 :(得分:1)
在行中:
String c1c2c3 = numString.substring(4);
String c1c2 = c1c2c3.substring(3);
您正在尝试访问不存在的位置。 Java中的数组从0开始直到“ - 1” 开始索引是包含的,结束索引在子字符串方法中是独占的。
stringReverse的正确版本可能是:
public static int stringReverse (String numString)
{
String c1c2c3 = numString.substring(0,3);
String c2c3c4 = numString.substring(1,4);
String c1c2 = c1c2c3.substring(0,2);
String c3c4 = c2c3c4.substring(1,3);
String c1 = c1c2.substring(0,1);
String c2 = c1c2.substring(1,2);
String c3 = c3c4.substring(0,1);
String c4 = c3c4.substring(1,2);
String numStringReverse = c4 + c3 + c2 + c1;
int reversedString = Integer.parseInt(numStringReverse);
return reversedString;
}
另外,请尝试阅读以下答案:Java: substring index range
答案 1 :(得分:0)
在Java中可能有更优雅的方法来反转字符串。如果您想在Java中使用简单的替代方法,请查看类java.lang.StringBuilder。
查看文档并查找reverse
方法。