我编写了以下程序,以相反的顺序打印数字。 它给了我一个ArrayIndexOutOfBound异常
import java.util.Scanner;
public class Ch6_26 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int x;
System.out.println("Enter the number to be reversed: ");
x = input.nextInt();
Reverse(x);
}
static void Reverse(int a){
int s[] = new int[5];
int j = 0;
int x = a;
for(int i = 1; a >= 0 ; i++){
s[i] = x % 10;
x /= 10;
j = i;
}
for(int i = 0; i <= j; i++){
System.out.printf("%d ", s[i]);
}
}
}
答案 0 :(得分:4)
尝试
for(int i = 0; x >= 0 && i<5 ; i++){
s[i] = x % 10;
x /= 10;
j = i;
}
并且还要记住,这仅适用于小于或等于5位的数字
答案 1 :(得分:1)
在for循环中,结束条件取决于a
更改,但您不能更改它:
for(int i = 1; *a* >= 0 ; i++){
s[i] = x % 10;
x /= 10;
j = i;
//a is not changed at all..?
}
所以for循环永远不会结束,继续i = 5 +,因为你的数组不是那么大而引发错误
答案 2 :(得分:1)
这就是它出界的原因:
for(int i = 1; a >= 0 ; i++){
当a >= 0
开始大于或等于0时, a
将始终为真,因为您不会在循环中修改a
的值。 s
的长度始终为5,但i
只会继续变大。一旦i
达到5,它就会超出s
数组的范围,该数组的大小只有5。
答案 3 :(得分:1)
数组的重要用途是什么,为什么不这样做呢:
import java.util.Scanner;
public class Reverse
{
public static void main(String... args)
{
Scanner input = new Scanner(System.in);
int number = input.nextInt();
System.out.println(reverseNumber(number));
}
private static int reverseNumber(int num)
{
int rev = 0;
while (num > 0)
{
rev = rev * 10 + (num % 10);
num /= 10;
}
return rev;
}
}