在java中访问2d char数组列

时间:2016-01-06 07:37:03

标签: java arrays multidimensional-array

我试图遍历2d char数组,但是我需要按列访问元素。问题是列的长度不固定,我的意思是ex。我的char数组包含这个。

abcde
kj
m
vghyed
erty

所需的输出:

akmve
bjgr
cht
dyy
ee
d

我尝试了所有方法,例如将每一行转换为字符串。可以像

一样访问2d数组中的行
String mystr = String.valueOf(myChar[i]);

像这样使用嵌套循环

for(j=0;j<c;j++)
    {
        for(i=0;i<r;i++)
        {
            //if(mychar[i][j]!=null)
            {
                System.out.print(mychar[i][j]);
            }
        }
        System.out.println();
    }

给我

akhr 
bjyt 
cmey 
dvd

哪个错了

但有没有办法明智地访问2d数组?

2 个答案:

答案 0 :(得分:0)

String[] strings = new String[5];
int maxLength = //u fond the size of the longest string

for (int i=0; i<maxLength; i++) { //the number of lines u will get
    for (int j=0; i<strings.length; i++) { //for each strings u have
        if(j<strings[i].length)
            print(strings[i].substring(j)
    }
    println;
}

没有理由你不能自己做 编辑:你实际上是由你自己做的。 试试&#34; System.out.print(mychar [j] [i]);&#34;代替

答案 1 :(得分:0)

添加一个变量后,您可以执行以下操作,这很容易,但看起来不太好:

int max = 0;
for (char[] a1 : a) {
    max = max > a1.length ? max : a1.length;
}

这是为了找到最大的子阵列,所以你没有得到NullpointerException,下面将打印你想要的输出:

for (int i = 0; i < max; i++) {
    for (char[] a1 : a) {
        if (i < a1.length) {
            System.out.print(a1[i]);
        }
    }
    System.out.println(); // only for newline
}

或者你可以这样混淆:

for (int i = 0, max = a[0].length; i < max; i++) {
    for (char[] a1 : a) {
        max = max > a1.length ? max : a1.length;
        if (i < a1.length) {
            System.out.print(a1[i]);
        }
    }
    System.out.println(); // only for newline
}

这将擦除一个循环,变量'max'仅在需要它的循环中可用。