2015-11-21 120 views
0

对于一个实践问题,为我的编程类,我们有:错误输出二维String数组转换成一维字符串数组

“定义返回字符串的二维数组具有的第一行的方法字符串名称为“John”。“

public class TwoDimensionalStringArrayI { 

public static void main(String[] args) { 
    String[][] b = {{"John", "Abby"}, 
        {"Sally", "Tom"}}; 

    System.out.println(firstRow(b)); // line 8 
} 

public static String[] firstRow(String[][] a) { 
    String[] name = new String[a[0].length]; 
    int counter = 0; 

    for (int row = 0; row < a.length; row++) { 
     for (int col = 0; col < a[row].length; col++) { 
      name[counter++] = a[row][col]; // line 17 
     } 
    } 
    return name; 
    } 
} 

通过Eclipse的调试过程后,我的String数组name设置为{"John", "Abby"},但我在8号线和17尝试运行程序时得到一个ArrayIndexOutOfBoundsException错误。

困惑于如何让程序输出名称“John”和“Abby”。

回答

0

因为这条线的线;

for (int row = 0; row < a.length; row++) { 

firstRow(String[][] a)方法的目标是返回所述阵列的第一行,因此,上面的线应如下;

for (int row = 0; row < 1; row++) { 

因为它遍历所有数组的元素的,它超过了name阵列仅具有[0]。长度室,数值,2(String[] name = new String[a[0].length];

在大小为了使你的代码有效,有两种方法;

第一个解决方案

更新for循环条件如上所述,测试代码是;

public class TwoDimensionalStringArrayI { 
    public static void main(String[] args) { 
     String[][] b = {{"John", "Abby"}, 
         {"Sally", "Tom"}}; 

//  System.out.println(firstRow(b)); // line 8 
     String[] result = firstRow(b); 
     for(int i = 0; i < result.length; i++) 
      System.out.print(firstRow(b)[i] + " "); 
    } 

    public static String[] firstRow(String[][] a) { 
     String[] name = new String[a[0].length]; 
     int counter = 0; 

//  for (int row = 0; row < a.length; row++) { 
     for (int row = 0; row < 1; row++) { 
      for (int col = 0; col < a[row].length; col++) { 
       name[counter++] = a[row][col]; // line 17 
      } 
     } 
     return name; 
    } 
} 

输出如下;

John Abby 

您已经注意到(您应该),我也更新了打印行。

第二种解决

使你的代码功能的第二种方法是,对于一个[] [],这实际上是为返回容易只返回第一行[1]。测试代码是;

public static void main(String[] args) { 
     String[][] b = {{"John", "Abby"}, 
         {"Sally", "Tom"}}; 

//  System.out.println(firstRow(b)); // line 8 
     String[] result = firstRow(b); 
     for(int i = 0; i < result.length; i++) 
      System.out.print(firstRow(b)[i] + " "); 
    } 

    public static String[] firstRow(String[][] a) {  
     return a[0]; 
    } 

而输出是;

John Abby 

希望它有帮助。

0

我想你应该切换变量ROW和COL在17

+0

我试过了,但它只是将名称数组更改为“John”和“Sally”。此外,我仍然得到错误。 – derpt34