0

私は文字列を持っています

String word = "FrenciusLeonardusNaibaho";

次のようなマトリックスを作成しようとしている間:

char matriks[][] = new char[16][16];
    int k = 0;

    for (int i = 1; i < 16; i++) {
        for (int j = 1; j < 16; j++) {
            matriks[i][j] = word.charAt(k);
            k++;
        }
    }

このエラーが発生しました

String index out of range: 24

どうすればこれを達成できますか?ありがとう..

4

6 に答える 6

4

atの終わりを超えてオーバーフローしています。基本的に、マトリックスを満たすのに十分なアルファベットがありません。wordword.charAt(k);

このようなことができます

if(k >= word.length())
   break;

内側のループの下。または、この条件で要素をデフォルト値に初期化できます。

さらに、他の人が述べたように、1 から開始する正当な理由がない限り、i,j は 0 から開始する必要があります。

于 2013-01-11T05:00:24.133 に答える
1
char matriks[][] = new char[16][16];
int k = 0;

for (int i = 0; i < 16; i++) {
    for (int j = 0; j < 16; j++) {
        matriks[i][j] = word.charAt(k%word.length());
        k++;
    }
}

したがって、最初から最後まで行ってから再起動できます。

于 2013-01-11T05:11:11.263 に答える
0

16x16配列を埋め、ループを16x16回繰り返していますが、ワードサイズが16x16未満です。したがって、kが単語の長さに等しくなったときにチェックを入れてから、ループを終了します。次のようにコードを変更します。

char matriks[][] = new char[16][16];
int k = 0;

for (int i = 1; i < 16; i++) {
    for (int j = 1; j < 16; j++) {
        if(k >=word.length)
            break;
        matriks[i][j] = word.charAt(k);
        k++;
    }
}   
于 2013-01-11T05:42:34.547 に答える
0

追加してみてください

if(k >= word.length())
    k = 0;

内側の for ループに対して、これは単語の先頭から配列を埋め続けます。

于 2013-01-11T05:09:20.863 に答える
0

「範囲外」または「範囲外」は、配列、リスト、文字列、またはその境界を超える範囲を持つものを読み書きしようとすると発生します。文字列に 7 文字しか含まれていない場合、インデックス 8 の文字を読み取ることはできません。これは文字列の RAM ではなく、C アレイで時々発生するような RAM の破損を引き起こす可能性があります。

配列と for ループを設定するときは、コンテナーのサイズまたは長さ関数を使用して文字列の範囲内にあるかどうかを確認してください。文字列の特殊な場合は ですlength

文字列に格納されている名前のリストを分割しようとしていると思います。そのような場合、list() のような動的コンテナーを作成する方が簡単ですhttp://www.easywayserver.com/blog/java-list-example/

ここにちょっとした例があります。これらの目的のために、私は while ループを好みます。少なくとも実行時にデータを解釈せずにリストの長さを知っている場合、forループは良い選択ですが、これには適していません:

String names = "Foo Bar";
List<String> seperatedNames = new List<String>();
String name = "";
int i = 0;
while (i < names.length()) {
    if (names.charAt(i) == ' ') { // you can check for upper case char too
        seperatedNames.add(name); // add name to list
        name = ""; // clear name-buffer
        i++; // increment i, else it would produce an infinite loop
    }
    name += names.charAt(i++); // add current char to name-buffer and increment current char
}

少しでもお役に立てれば幸いです。

于 2013-01-11T05:24:16.927 に答える
0

もちろん、単語の文字は 24 文字しかないため、このエラーは確実に発生します。

これを回避するには、単語の長さを確認し、すべてのループを中断する必要があります。

このコードを試してください。

char matriks[][] = new char[16][16];
int k = 0;
int lenght = word.length();
outerloop:

for (int i = 0; i < 16; i++) {
    for (int j = 0; j < 16; j++) {
        matriks[i][j] = word.charAt(k);
        k++;
        if(k >= lenght){
            break outerloop;
        }
    }
}
于 2013-01-11T05:33:31.563 に答える