我正在尝试将数据加载到二维数组中。 我的代码是
import java.util.Arrays;
public class MyClass {
public static void main(String args[])
{
String[] datas=null;
datas = new String[4];
datas[0] = "abc,def,ghi";
datas[1] = "1,2,3";
datas[2] = "abc,def,ghi";
datas[3] = "1,2,3";
int cols = datas.length;
int rows = datas[1].split(",").length;
System.out.println("rows="+rows+" and cols="+cols);
String[][] table_data= new String[cols][rows];
for(int i=0;i<cols;i++)
{
System.out.println("came for " + i);
table_data[cols] = datas[i].split(",");
}
System.out.println("Table Datas = " + Arrays.deepToString(table_data));
}
}
但是我将索引超出绑定异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at MyClass.main(MyClass.java:24)
我尝试将声明更改为
String[][] table_data= new String[cols+1][rows+1];
它显示输出为
rows=3 and cols=4
came for 0
came for 1
came for 2
came for 3
Table Datas = [[null, null, null, null], [null, null, null, null], [null, null, null, null], [null, null, null, null], [1, 2, 3]]
但这不是我想要的输出。任何帮助都会非常充实。
答案 0 :(得分:3)
在我看来,您必须使用table_data[row]
更改table[i]
。
for(int i=0;i<cols;i++){
System.out.println("came for " + i);
table_data[i] = datas[i].split(",");
}
答案 1 :(得分:0)
试
table_data[cols-1] = datas[i].split(",");
因为您将数组设置为4列:
String[][] table_data= new String[cols][rows];
其中cols = 4
,然后你尝试编辑索引4,它实际上是第5个元素(0,1,2,3,4)并且不存在:
table_data[cols] = datas[i].split(",");
但是因为这个分配发生在一个没有进一步代码的循环中:
for(int i=0;i<cols;i++)
{
System.out.println("came for " + i);
table_data[cols] = datas[i].split(",");
}
,无论如何都没有意义。正如另一位aswerer所写,你可能想写:
for(int i=0;i<cols;i++)
{
System.out.println("came for " + i);
table_data[i] = datas[i].split(",");
}
答案 2 :(得分:0)
您总是在写入数组的最后一个元素。您应该使用table_data[i]
代替table_data[cols]
。