Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 沿四个方向(上、下、左、右)遍历二维阵列_Java_Arraylist - Fatal编程技术网

Java 沿四个方向(上、下、左、右)遍历二维阵列

Java 沿四个方向(上、下、左、右)遍历二维阵列,java,arraylist,Java,Arraylist,我试图创建一个方法来遍历一个正方形的二维数组,该数组接受一个指定方向的参数,可以是上、下、左或右。我已经能够将任务分为两种不同的方法;一个用于垂直移动,一个用于水平移动: private void concatHorizontal(boolean left) { int rowIndex, columnIndex, index; for (int i=0; i<board.size(); i++) { index = (left) ?

我试图创建一个方法来遍历一个正方形的二维数组,该数组接受一个指定方向的参数,可以是上、下、左或右。我已经能够将任务分为两种不同的方法;一个用于垂直移动,一个用于水平移动:

private void concatHorizontal(boolean left) {
        int rowIndex, columnIndex, index;
        for (int i=0; i<board.size(); i++) {
            index = (left) ? 0 : board.get(0).size()-1;

            for (int j=0; j<board.get(0).size(); j++) {
                if (left) {
                    rowIndex = i;
                    columnIndex = j;
                } else {
                    rowIndex = board.size() - 1 - i;
                    columnIndex = board.get(0).size() - 1 - j;
                }

                int val = board.get(rowIndex).get(columnIndex).getValue();
                if (val != 0) {
                    board.get(rowIndex).get(index).setValue(val);
                    if (columnIndex != index) {
                        board.get(rowIndex).get(columnIndex).setValue(0);
                    }
                    index = (left) ? index+1 : index-1;
                }
            }
        }
    }

    private void concatVertical(boolean up) {
        int rowIndex, columnIndex, index;
        for (int i=0; i<board.get(0).size(); i++) {
            index = (up) ? 0 : board.size()-1;

            for (int j=0; j<board.size(); j++) {
                if (up) {
                    columnIndex = i;
                    rowIndex = j;
                } else {
                    columnIndex = board.get(0).size() - 1 - i;
                    rowIndex = board.size() - 1 - j;
                }

                int val = board.get(rowIndex).get(columnIndex).getValue();
                if (val != 0) {
                    board.get(index).get(columnIndex).setValue(val);
                    if (rowIndex != index) {
                        board.get(rowIndex).get(columnIndex).setValue(0);
                    }
                    index = (up) ? index+1 : index-1;
                }
            }
        }
    }
private void concatHorizontal(布尔左){
int行索引、列索引、索引;
对于(int i=0;i这是解决方案的一个步骤(简化了对元素值的访问):

private void concatHori(布尔左){
如果(左){
concatHori(0,0,1);
}否则{
concatHori(board.size()-1,board.get(0.size()-1,-1);
}
}
私有void concatHori(int rowstart、int colstart、int inc){

对于(int i=0;i
board
似乎不是“二维数组”。你的问题是什么?也许你是想发布这个?@Andreas这是一个二维的arraylist。array和arraylist在这里重要吗?另外,我会更新帖子以使问题更清楚。在编码中,精确性/清晰性很重要,添加4个字母使其精确非常容易。在这种情况下,这并不重要,但
List
vs数组在其他情况下可能会产生很大的差异,因此养成精确的习惯是很好的。作为一个工作代码改进问题,这可能是最好的,除非有可能指定所有for循环运算符(
int i=0;iWell,Java 8有函数,因此您可能会想到一个算法。可能需要将数组包装到一个类中,并使用一个访问函数get(r,c),这样就可以通过一个函数传入。但它只会创建比现在更多的代码(我的改进很少)。
        for (int i=0; i<board.size(); i++) {
            for (int j=0; j<board.get(0).size(); j++) {
                // Traverse to the right
            }
        }

        for (int i=0; i<board.size(); i++) {
            for (int j=board.get(0).size()-1; j>=0; j--) {
                // Traverse to the left
            }
        }

        for (int i=0; i<board.get(0).size(); i++) {
            for (int j=0; j<board.size(); j++) {
                // Traverse downwards
            }
        }

        for (int i=0; i<board.get(0).size(); i++) {
            for (int j=board.size()-1; j>=0; j--) {
                // Traverse upwards
            }
        }
private void concatHori(boolean left) {
    if( left ){
        concatHori( 0, 0, 1 );
    } else {
        concatHori( board.size()-1, board.get(0).size()-1, -1 );
    }
}

private void concatHori(int rowstart, int colstart, int inc ) {
    for (int i=0; i<board.size(); i++) {
        int index = colstart;
        for (int j=0; j<board.get(0).size(); j++) {
            int rowIndex = rowstart + inc*i;
            int colIndex = colstart + inc*j;
            int val = board.get(rowIndex).get(colIndex);
            if (val != 0) {
                board.get(rowIndex).set(index, val);
                if (colIndex != index) {
                    board.get(rowIndex).set(colIndex, 0);
                }
                index += inc;
            }
        }
    }
}