Java 如何从字符串生成矩阵16 x 16?

Java 如何从字符串生成矩阵16 x 16?,java,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);

我有一根绳子

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++;
        }
    }
我怎样才能做到这一点?
谢谢。

您在
word.charAt(k)的
word
结尾处溢出了。基本上你没有足够的字母来填充矩阵

你可以这样做

if(k >= word.length())
   break;
在内环下面。或者,您可以使用此条件将元素初始化为某个默认值


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

你在
word.charAt(k)处溢出
word
。基本上你没有足够的字母来填充矩阵

你可以这样做

if(k >= word.length())
   break;
在内环下面。或者,您可以使用此条件将元素初始化为某个默认值

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

尝试添加

if(k >= word.length())
    k = 0;
对于内部for循环,这将继续从单词开头填充数组。

尝试添加

if(k >= word.length())
    k = 0;
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++;
    }
}
对于内部for循环,这将继续从单词的开头填充数组。

char matriks[][]=new char[16][16];
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++;
    }
}
int k=0; 对于(int i=0;i<16;i++){ 对于(int j=0;j<16;j++){ 矩阵[i][j]=word.charAt(k%word.length()); k++; } }
因此,它可以从开始到结束,然后重新启动。

char-matriks[][]=new-char[16][16];
int k=0;
对于(int i=0;i<16;i++){
对于(int j=0;j<16;j++){
矩阵[i][j]=word.charAt(k%word.length());
k++;
}
}

因此,它可以从开始到结束,然后重新启动。

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

当您设置数组和for循环时,请尝试检查您是否仍在容器的大小或长度函数的字符串范围内。在字符串的特殊情况下,它是
长度

我认为您正在尝试拆分存储在字符串中的名称列表。在这种情况下,更容易创建动态容器,比如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
}
String name=“Foo-Bar”;
List separatednames=新列表();
字符串名称=”;
int i=0;
而(i

我希望我能帮点忙。

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

当您设置数组和for循环时,请尝试检查您是否仍在容器的大小或长度函数的字符串范围内。在字符串的特殊情况下,它是
长度

我认为您正在尝试拆分存储在字符串中的名称列表。在这种情况下,更容易创建动态容器,比如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
}
String name=“Foo-Bar”;
List separatednames=新列表();
字符串名称=”;
int i=0;
而(i

我希望我能帮点忙。

当然,你肯定会犯这个错误,因为你的单词中只有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;
        }
    }
}
char矩阵[][]=新字符[16][16];
int k=0;
int lenght=word.length();
外部环路:
对于(int i=0;i<16;i++){
对于(int j=0;j<16;j++){
矩阵[i][j]=word.charAt(k);
k++;
如果(k>=长度){
断开外环;
}
}
}

当然,您肯定会遇到这个错误,因为您的单词中的字符只有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;
        }
    }
}
char矩阵[][]=新字符[16][16];
int k=0;
int lenght=word.length();
外部环路:
对于(int i=0;i<16;i++){
对于(int j=0;j<16;j++){
矩阵[i][j]=word.charAt(k);
k++;
如果(k>=长度){
断开外环;
}
}
}

您正在填充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++;
    }
}   
char矩阵[][]=