获取2d arraylist元素-java

获取2d arraylist元素-java,java,arraylist,multidimensional-array,2d,Java,Arraylist,Multidimensional Array,2d,我正在尝试为2D ArrayList实现螺旋输出。我在第38行发现IndexOutOfBoundsException错误: 添加(a.get(rightColumn.get(i)) 我的代码在逻辑上看起来很正确。我不确定我在哪里犯了错误。有人能给我一个如何解决这个问题的线索吗?谢谢 import java.util.*; public class Solution { public static ArrayList<Integer> spiralOrder(final List&l

我正在尝试为2D ArrayList实现螺旋输出。我在第38行发现IndexOutOfBoundsException错误: 添加(a.get(rightColumn.get(i))

我的代码在逻辑上看起来很正确。我不确定我在哪里犯了错误。有人能给我一个如何解决这个问题的线索吗?谢谢

import java.util.*;

public class Solution {
public static ArrayList<Integer> spiralOrder(final List<ArrayList<Integer>> a) {
     ArrayList<Integer> result = new ArrayList<Integer>();

     int direction = 0;

     /*
     *  0 for left to right
     *  1 for top to bottom
     *  2 for right to left
     *  3 for bottom to top
     */

     int topRow = 0;
     int bottomRow = a.size() - 1;

     int leftColumn = 0;
     int rightColumn = a.get(0).size() - 1;


     while (topRow <= bottomRow && leftColumn <= rightColumn) {

         if (direction == 0) {
           for (int i = leftColumn; i <= rightColumn; i++) {
               result.add(a.get(topRow).get(i));

           }  

           topRow++;
           direction = 1;
         }

         else if (direction == 1) {
             for (int i = topRow; i <= bottomRow; i++) {
                 result.add(a.get(rightColumn).get(i));

             }

             rightColumn--;
             direction = 2;
         }

         else if (direction == 2) {
             for (int i = rightColumn; i>= leftColumn; i--) {
                 result.add(a.get(bottomRow).get(i));

             }

             bottomRow--;
             direction = 3;
         }

         else if (direction == 3) {
             for (int i = bottomRow; i >= topRow; i--) {
                 result.add(a.get(leftColumn).get(i));

             }

             leftColumn++;
             direction = 0;
         }


     }


     for (int i = 0; i < result.size(); i++) {
         System.out.println(result.get(i));
     }

     return result;
}

public static void main (String[] args) {
    List<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

    ArrayList<Integer> row1 = new ArrayList<Integer>();
    ArrayList<Integer> row2 = new ArrayList<Integer>();
    ArrayList<Integer> row3 = new ArrayList<Integer>();

    row1.add(1);
    row1.add(2);
    row2.add(3);
    row2.add(4);
    row3.add(5);
    row3.add(6);



    list.add(row1);
    list.add(row2);
    list.add(row3);

    spiralOrder(list);

}
}
import java.util.*;
公共类解决方案{
公共静态数组列表顺序(最终列表a){
ArrayList结果=新建ArrayList();
int方向=0;
/*
*0表示从左到右
*从上到下为1
*从右到左为2
*3用于从下到上
*/
int-topRow=0;
int bottomRow=a.size()-1;
int leftColumn=0;
int rightColumn=a.get(0).size()-1;

而(topRow也许您应该在for之外增加topRow

for (int i = leftColumn; i <= rightColumn; i++) {
       result.add(a.get(topRow).get(i));

   }
 topRow++;

用于现在我已经更新了这个问题。现在我在第37行得到这个错误,你应该只用顶部和底部来索引AGER。花时间想想你在做什么。建议:你应该考虑两个循环而不是一个。AAH,犯了一个愚蠢的错误。应该是B。e result.add(a.get(i.get(rightColumn));我错误地交换了列和行。