2016-01-06 22 views
0

我试图遍历一个2d的char数组,但是我需要访问列中的元素。问题是,列的长度不固定,我的意思是前例。我的char数组包含这个。在java中访问一个明智的2d char阵列

abcde 
kj 
m 
vghyed 
erty 

期望输出继电器:

akmve 
bjgr 
cht 
dyy 
ee 
d 

我尝试了所有方法,就像每一行转换成字符串,恩。在二维数组行可以像这样

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(); 
    } 

String mystr = String.valueOf(myChar[i]); 

使用嵌套循环的访问给我

akhr 
bjyt 
cmey 
dvd 

哪项是错误的

,但有办法访问2d数组列明智吗?

+0

由于2d数组基本上是一个数组数组,因此您的方法只能在一维上使用数组。你可能想要做的是在嵌套循环中建立字符串,你可以像'[x] [y]'或'[y] [x]'那样访问它们,这将改变你创建字符串的方式(列或行) – SomeJavaGuy

回答

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; 
} 

没有理由ü不可能由你自己 编辑使它:U实际上是由你自己做到了。 尝试“System.out.print(mychar [j] [i]);”而不是

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'仅在需要的循环中可用。