我编写了一个程序来以相反的顺序打印数字的数字。它给了我ArrayIndexOutOfBound异常

时间:2013-01-05 04:15:53

标签: java

我编写了以下程序,以相反的顺序打印数字。 它给了我一个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]);
        }
    }
}

4 个答案:

答案 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;
    }
}