有 Java 编程相关的问题?

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

二维数组中的java反转数字

我试图反转这个2D数组中的数字,但碰巧只反转了第一个和最后一个数字

到目前为止,我已经做到了这一点,但不知道错误在哪里,也不知道如何纠正错误,因此每个数字都被颠倒,而不仅仅是第一个和最后一个:

int [][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        
        int x = 0, y = array.length - 1;
        int a = 0, b = array[y - 2].length - 1;
        int temp; 
        
        while(x < y && a < b)
        {
          temp = array[x][a]; 
          array[x][a] = array[y][b]; 
          array[y][b] = temp;
          a++; b--;
          
          if(a == 3 && b == 0)
          {
              a = 0;
              x++; y--;
          } 
        }

        
        for(int i=0; i<array.length; i++)
        {
            for(int j=0; j<array[i].length; j++)
            {
                System.out.println(array[i][j]);
            }
        }

共 (3) 个答案

  1. # 1 楼答案

    好的,这里有另一种不需要使用Collections的方法。它确实使用Arrays.deepToString()来显示结果

    • 这里显示的所有反向方法只需要在数组的一半上迭代。无论数组的值是偶数还是奇数,这都会起作用
    • 首先,反转数组的数组
    • 然后在这个过程中,反转各个行,当主数组反转时,从外到内。辅助方法可减少代码重复
    • 如果数组长度为奇数,请在中间数组上再次调用reverse方法
    • 这也与每个阵列的大小无关
    int[][] array = { { 1, 2, 3, 4, 5 }, { 6, 7, 8 }, { 9 },
            { 10, 11, 12 } };
    
    System.out.println("Before: " + Arrays.deepToString(array));
    

    现在输入驱动程序代码

    int len = array.length;
        
    for (int i = 0; i < len / 2; i++) {
        int[] s = array[i];
        array[i] = array[len - i - 1];
        array[len - i - 1] = s;
        reverse(array[i]);
        reverse(array[len - i - 1]);
    }
    if (len % 2 == 1) { 
        reverse(array[len/2]);
    }   
    System.out.println("After:  " + Arrays.deepToString(array));
    
    

    输出

    Before: [[1, 2, 3, 4, 5], [6, 7, 8], [9], [10, 11, 12]]
    After:  [[12, 11, 10], [9], [8, 7, 6], [5, 4, 3, 2, 1]]
    
    

    助手方法

    public static void reverse(int[] v) {
        int len = v.length;
        for (int i = 0; i < len / 2; i++) {
            int t = v[i];
            v[i] = v[len - i - 1];
            v[len - i - 1] = t;
        }
    }
    
  2. # 2 楼答案

    另一种解决方法:

    import java.util.*;
    
    public class main
    {   
        public static void main(String[] args)
        {           
            int [][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
            
            int x = 0, y = array.length - 1;
            int temp, temp2, temp3; 
            
            while(x < y)
            {
                temp = array[0][x]; 
                array[0][x] = array[0][y]; 
                array[0][y] = temp;
              
                temp2 = array[1][x]; 
                array[1][x] = array[1][y]; 
                array[1][y] = temp2;
                
                temp3 = array[2][x]; 
                array[2][x] = array[2][y]; 
                array[2][y] = temp3;
                
                x++; y ;
            }
            
            //here we get the final answer {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}} 
            for(int i=0; i<array.length; i++)
            {
                for(int j=0; j<array[i].length; j++)
                {
                    System.out.println(array[array.length - (i + 1)][j]);
                }
            }
        }
    }
    
  3. # 3 楼答案

    你可以用这样的东西

    public static void main(String[] args) {
        int [][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        ArrayList<ArrayList<Integer>> arr =new ArrayList<>();
    
        for(int i=0;i<array.length;i++){
            ArrayList<Integer> temp = new ArrayList<>();
            for(int j=0;j<array[i].length;j++){
                temp.add(array[i][array.length-1-j]);
            }
            arr.add(temp);
        }
        Collections.reverse(arr);
        System.out.println(arr);
    }
    

    产量将是,

    [[9, 8, 7], [6, 5, 4], [3, 2, 1]]