0

私が作成したこのコードで、ArrayIndexOutofBounds例外エラーが発生し、何が起こっているのかわかりません。コードで生成したいのは、数値の char 配列です。

コードは次のとおりです。

public class testing {

    static int k = 2;

    public static void main(String args[]) {

        int[] numArr = new int[] { 15, 18, 21 };

        createChar(numArr, k);
    }

    public static char[] createChar(int numArr[], int k) {
        char[] store = new char[k - 1];

        for (int i = 0; i < k; i++) {
            int divide = numArr[i] / 4;

            int numStore = divide % 4;
            charN(numStore, store, k);
        }
        return store;
    }

    public static char[] charN(int numStore, char store[], int k) {
        for (int i = 0; i < k; i++) {
            if (k == 0) {
            } else {
                store[k - 1] = (char) numStore;
                k = k - 1;
            }
        }
        System.out.print(store);
        return store;
    }
}

どうもありがとう!

4

3 に答える 3

1

value についてk = 2は、以下のステートメント: -

char[] store = new char[k - 1];

size の配列を作成します1。そのため、アクセスできるのは0th index.

しかし、さらにcharNメソッドの中で、あなたはそのインデックスにアクセスしています1st: -

store[k - 1] = (char) numStore;  // Since k = 2, k - 1 = 1.

アレイの作成を次のように変更します: -

char[] store = new char[k];

さらに、なぜあなたがk = 21位になったのか理解できません。として使用することを意味している可能性があります。indexその場合、配列の作成は size になりますk + 1k + 1それに応じて、 for ループはではなくまで反復しますk

charNまた、私はあなたの方法の役割を理解していません。createChar実際、最初にメソッドで配列を反復処理し、次に各要素をメソッドに渡すのは奇妙に思えますcharN。そしてchar array、同じ値を複数のインデックスに割り当てて、 を反復処理しています。それとは別に、ループ内で同時にデクリメントkとインクリメントを行っています。iそれは本当に奇妙です。最後に、array両方のメソッドから返されますが、戻り値はまったく使用されていません。

自分が何をしたいのかを理解するのはかなり難しいです。ただし、前の段落で述べたすべての点を考慮する必要があります。そこにある各ステップについて、なぜこれをやりたいのか考えてみてください。簡単な代替手段はありますか?ここで 2 回反復するメソッドが本当に必要ですか?

もう一度デザインを見直してみることをお勧めします。私が上に投稿した解決策はあなたの を解決するかもしれませんが、あなたcompiler errorの にはいくつかの問題がありますlogic。あなたはそれを世話する必要があります。

于 2013-01-31T20:14:23.490 に答える
0

あなたの投稿によると、声明

char[] store = new char[k - 1];   

サイズ1のchar配列になります。そのため、charNメソッドでアクセスしようとすると

store[k - 1] = (char) numStore;

ここでは「k」が 2 であるため、store[1] にアクセスしようとしています。これは間違っています。store[1] を使用すると、配列サイズが 1 しかない配列の 2 番目の要素にアクセスしようとしているためです。

于 2013-01-31T20:17:55.660 に答える