-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 >= 0ループ内の aの値を変更しないため、開始が0以上である場合は常にtrueになります。常に5の長さですが、大きくなり続けます。5に達すると、サイズが5しかない配列の範囲外になります。asiis

于 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 に答える