Java 二维数组填充不起作用
我试图用我读入的字符串中的字符填充2D数组。我在填充这个2D数组时遇到了一个问题。它不断打印一个比我给它的数组大的2D数组,并且数字似乎总是6,而不是字符串中的字母 我将字符串存储在名为tempArray的ArrayList中 输入字符串:Java 二维数组填充不起作用,java,arrays,arraylist,Java,Arrays,Arraylist,我试图用我读入的字符串中的字符填充2D数组。我在填充这个2D数组时遇到了一个问题。它不断打印一个比我给它的数组大的2D数组,并且数字似乎总是6,而不是字符串中的字母 我将字符串存储在名为tempArray的ArrayList中 输入字符串: WUBDLAIUWBD LUBELUFBSLI SLUEFLISUEB 我实例化了一个columnlength=11、rowcount为3的二维数组 epidemicArray=newint[rowCount][columnCount] 数组,然后再尝试填充
WUBDLAIUWBD
LUBELUFBSLI
SLUEFLISUEB
我实例化了一个columnlength=11、rowcount为3的二维数组
epidemicArray=newint[rowCount][columnCount]代码>
数组,然后再尝试填充它:
00000000000
00000000000
00000000000
我的代码:
public static void updateArray(){
//extract string from temp
for (int i = 0; i < tempArray.size(); i++){
String temp = tempArray.get(i);
char[] charz = temp.toCharArray();
for (int j = 0; j < charz.length; j++){
for (int k = 0; k < rowCount; k++){
for (int l = 0; l < columnCount; l++){
epidemicArray[k][l] = charz[j];
}
}
}
}
}
预期输出:(2D阵列)
谢谢,这真的让我很烦。你正在用charz[j]
得到的最后一个值覆盖整个epidemicArray
。显然是66。实际上,您正在用charz
中的每个值覆盖整个数组,最后一个值获胜。将代码更改为:
public static void updateArray(){
//extract string from temp
for (int i = 0; i < tempArray.size(); i++){
String temp = tempArray.get(i);
char[] charz = temp.toCharArray();
for (int j = 0; j < charz.length; j++){
epidemicArray[i][j] = charz[j];
}
}
}
publicstaticvoidupdatearray(){
//从temp中提取字符串
对于(int i=0;i
由于列数是其中一个字符串的长度(其中3个字符串的长度相同),因此此编辑应该有效
这是我的输出
[编辑]@magna_nz,我使用以下方法打印阵列
public static void printRow(int rowNumber) {
for (int i = 0; i < 11; i++) {
System.out.print( epidemicArray[rowNumber][i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
updateArray();
for (int i = 0; i < 3; i++) {
printRow(i);
}
}
publicstaticvoidprintrow(intrownumber){
对于(int i=0;i<11;i++){
System.out.print(epidemicArray[rowNumber][i]+“”);
}
System.out.println();
}
公共静态void main(字符串[]args){
updateArray();
对于(int i=0;i<3;i++){
printRow(i);
}
}
这将打印数字,但如果要打印字符,可以将上面的printRow方法更改为:
public static void printRow(int rowNumber) {
for (int i = 0; i < 11; i++) {
System.out.print( (char)epidemicArray[rowNumber][i] + " ");
}
System.out.println();
}
publicstaticvoidprintrow(intrownumber){
对于(int i=0;i<11;i++){
System.out.print((char)epidemicArray[rowNumber][i]+“”);
}
System.out.println();
}
这将为您提供以下结果:
您对输出的期望是什么?四个for循环让我做噩梦。如果您只是尝试填充二维数组,那么实际上只需要两个循环,除非您做了一些奇怪的事情。显示正在定义和初始化的数组。6868686868686868686868686873737373736666666666666666666666666666666666666666666666666666是输出。不工作。8785666876657385876668
76856676857066837673
83768569707383856966
就是我得到的。但是为什么它不显示数字而不是字符??还有,为什么长度大于11(这是我允许的最大数组大小)?@magna_nz,长度不大于11,正好是11。打印时,在每次打印之间添加一个空格分隔符,就像我在添加到reply@magna_nz由于使用int数组存储字符,因此它会为您提供与每个字符对应的数值,例如,大写A的对应值是65,B的对应值是66,Z的对应值是65+25=90(实际上是66,ASCII值是'B',OP输入的最后一个字符串的最后一个字符。)啊,是的。这确实解释了为什么输出看起来是数组初始值的两倍大。:)
public static void printRow(int rowNumber) {
for (int i = 0; i < 11; i++) {
System.out.print( epidemicArray[rowNumber][i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
updateArray();
for (int i = 0; i < 3; i++) {
printRow(i);
}
}
public static void printRow(int rowNumber) {
for (int i = 0; i < 11; i++) {
System.out.print( (char)epidemicArray[rowNumber][i] + " ");
}
System.out.println();
}