如何从String生成矩阵16 x 16?

时间:2013-01-11 04:59:26

标签: java

我有一个字符串

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

我怎样才能做到这一点? 感谢..

6 个答案:

答案 0 :(得分:4)

word word.charAt(k);以后溢出超出if(k >= word.length()) break; 。基本上你没有足够的字母表来填充你的矩阵。

你可以做这样的事情

{{1}}

在内环下面。或者您可以使用此条件将元素初始化为某个默认值。

此外,正如其他人所提到的,i,j应该从0开始,除非你有充分的理由从1开始。

答案 1 :(得分: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++;
    }
}

所以它可以从头到尾,然后重启。

答案 2 :(得分:0)

尝试添加

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

到你的内部for循环,这将继续从单词的开头填充数组。

答案 3 :(得分:0)

当您尝试读取或写入数组,列表,字符串或超出其边界范围的任何内容时,会出现“超出范围”或“超出范围”。当字符串仅包含7个字符时,您无法在索引8处读取字符。这不是你的字符串的RAM,它会导致RAM损坏,就像它有时在C阵列中发生一样。

当你设置你的数组和你的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
}

我希望我能帮上忙。

答案 4 :(得分: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;
        }
    }
}

答案 5 :(得分: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++;
    }
}