-1

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

4 回答 4

4

尝试

for(int i = 0; x >= 0 && i<5 ; i++){
        s[i] = x % 10;
        x /= 10;
        j = i;
    }

并且请记住,这仅适用于小于或等于 5 位的数字

于 2013-01-05T04:19:41.217 回答
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+,这会引发错误,因为你的数组不是那么大

于 2013-01-05T04:20:40.793 回答
1

这就是它超出范围的原因:

for(int i = 1; a >= 0 ; i++){

a >= 0a当开始大于或等于 0时将始终为真,因为您不修改a循环内的值。 s总是有 5 的长度,但i只是不断变大。一旦i达到 5,它就超出了s只有 5 大小的数组的范围。

于 2013-01-05T04:21:14.180 回答
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;
    }
}
于 2013-01-05T04:32:47.037 回答