在Java中没有正确初始化的二维数组

时间:2016-12-06 18:53:46

标签: java arrays multidimensional-array

我有一个逗号分隔的字符串,需要拆分为二维数组。我正在创建这样的数组:

String str = "-,-,-,-,-,-,-,-,-,0,0,0,0,1,1,1,2,2,2,2,3,3,-,-,-,-,-,-,-,-,-,-";
String [] arr = str.split(",");
String [][] 2dArr = new String[8][4];

int j = 0;
int z = 0;
for(int i=0; i!=32; i++){
    Log.i("loop vars", String.valueOf(i)+" "+String.valueOf(j)+" "+String.valueOf(z));
    2dArr[z][j] = arr[i];
    j++;
    z++;
    if(j==4){j=0;}
    if(z==8){z=0;}

}

但是当我打印它时:

for (String [] a : 2dArr) {
    Log.i("Array in 2dArr", Arrays.toString(a));
}

数组如下所示:

[-, null, null, null]
[null, -, null, null]
[null, null, -, null]
[null, null, null, -]
[-, null, null, null]
[null, -, null, null]
[null, null, -, null]
[null, null, null, -]

我做错了什么?如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您遇到的问题是:

for(int i=0; i!=32; i++){
    Log.i("loop vars", String.valueOf(i)+" "+String.valueOf(j)+" "+String.valueOf(z));
    2dArr[z][j] = arr[i];
    j++;
    z++;
    if(j==4){j=0;}
    if(z==8){z=0;}
}

您正在递增jz,它们会被初始化为0,每个循环都会将此值递增1.这就是您的输出是对角输出的原因。

您想要做的是每次递增z,一旦到达行尾,请递增j

使用数组初始化作为示例String [][] 2dArr = new String[8][4];

for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 4; j++) {
        // add element into the column
    }
    // inserted into the last column, now we will update the row and continue
}

编辑:我建议不要在此处使用84作为硬编码值,而是实际获取数组的长度。但是,由于你似乎是初学者,我使用这些硬编码使这个例子更加清晰。

答案 1 :(得分:0)

您需要在for循环的每次迭代中更改行和列。您只想在到达该行的列末尾时更改行。

删除您当前拥有的z++以及if (z==8)部分,因为z在这种情况下永远不会达到那么高,并将if (j==4)部分更改为{ {1}}

if(j == 4) { j=0; z++; }

答案 2 :(得分:0)

您可以这样做:

    byte[] bytes = null;

Document document = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("\some\dir\file.pdf"));
document.open();

Class.forName("com.mysql.jdbc.Driver");
Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "user", "pass");
PreparedStatement st = cn.prepareStatement("SELECT file FROM files");
ResultSet rs = st.executeQuery();
try {
while (rs.next()) {
bytes = rs.getBytes("file");
PdfReader reader = new PdfReader(bytes);
PdfImportedPage page;
page = writer.getImportedPage(reader, 1);
Image image = Image.getInstance(page);
document.add(image);
document.newPage();

} catch (Exception e) {
System.out.println(e);
}
}

然后只需打印出上面显示的类似for循环的2d数组。