有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java算法将2D数组向右移动,最后一列放在第一列

嗨,我想知道我是否可以得到帮助,创建一个方法来将Java2D数组移到右边

public void filter(PixelImage pi) {
    Pixel[][] data = pi.getData();  // get image data

    for (int row = 0; row < pi.getHeight(); row++) {
        for (int col = 0; col <  pi.getWidth(); col++) {
               if(col == pi.getWidth()-1){
                   Pixel lastCol = data[row][pi.getWidth()-1];
                   data[row][0] = lastCol;
                }
               else{    
                Pixel temp1 = data[row][col];              
                data[row][col+1] = temp1;
            }
        }
    }  
    // reset data into the PixelImage object pi
    pi.setData(data);
}

这是我的代码示例,工作不正常,有人能给我指出正确的方向吗


共 (3) 个答案

  1. # 1 楼答案

    要右移,你应该从右边开始。 现在你所做的是:

    A  B  C  D  E
    A->A  C  D  E
    A  A->A  D  E
    A  A  A->A  E
    A  A  A  A->A
    

    但你应该这样做:

    A  B  C  D  E
    A  B  C  D  E->temp
    A  B  C  D->D
    A  B  C->C  D
    A  B->B  C  D
    A->A  B  C  D
    temp->E A B C D
    

    为此,您需要从length-1开始循环到0

  2. # 2 楼答案

    这可能是工作

    public void filter(PixelImage pi) {
        Pixel[][] data = pi.getData();  // get image data
    
        for (int row = 0; row < pi.getHeight(); row++) {
            Pixel lastCol = data[row][pi.getWidth()-1];
            for (int col = pi.getWidth() - 1; col > 0; col ) {          
                    data[row][col] = data[row][col-1];
                }
            data[row][0] = lastCol;
        }  
        // reset data into the PixelImage object pi
        pi.setData(data);
    }
    
  3. # 3 楼答案

    这将工作,请检查

    call method shiftByOnePlace number of times you need to shift

    /**
     * 
     * @param matrix
     * @param noOfShift
     */
    public static void shiftByOnePlace(int[][] matrix) {
            // shifting all rows to right by 1 place
            for (int i = 0; i < matrix.length; i++) {
                int[] js = matrix[i];
                int temp = js[js.length - 1];
                shift(js);
                js[0] = temp;
        }
    }
    
    public static  void shift(int[] a) {
        for(int i=a.length-2;i>=0;i ) {
            a[i+1]= a[i];
        }
    }