将2D String数组转换为1D String数组时输出错误

时间:2015-11-21 22:16:23

标签: java arrays 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”感到困惑。

2 个答案:

答案 0 :(得分:0)

我认为你应该在第17行切换变量row和col。

答案 1 :(得分:0)

因为这条线;

firstRow(String[][] a)

for (int row = 0; row < 1; row++) { 方法的目标是返回数组的第一行,因此,上面的行应如下所示;

name

因为它遍历数组的所有元素,它超过了String[] name = new String[a[0].length];数组的大小,该数组只有一个[0] .length房间,数字上为2.(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; } } )< / p>

为了使您的代码有效,有两种方法;

第一个解决方案

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

John Abby 

输出如下;

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

你注意到了(你应该),我也更新了打印线。

第二个解决方案

使代码正常运行的第二种方法是,只返回[] []的第一行,这实际上就像返回[1]一样简单。测试代码是;

John Abby 

输出是;

   class Jobs(models.Model):
    jobnum = models.CharField(max_length=6, blank=False, null=True)
    color = models.CharField(max_length=120, blank=False, null=True)
    recruits = models.CharField(max_length=120, blank=False, null=True)
    contact = models.CharField(max_length=120, blank=False, null=True)
    subject = models.CharField(max_length=120, blank=False, null=True)
    .....more stuff....
        def __unicode__(self): #python 3.3. is __str__
            return self.jobnum

希望它有所帮助。