黑马程序员技术交流社区

标题: 关于二位数组的问题 [打印本页]

作者: pengwei1989    时间: 2015-9-19 09:36
标题: 关于二位数组的问题
编写Java程序,将二位数组中的行和列互调显示出来。
如:
        1 2 3
        4 5 6
        7 8 9
显示输出的结果为:
       1 4 7
       2 5 8
       3 6 9
作者: orgcheng    时间: 2015-9-19 10:44
首先要确保行列相等,不然达不到你的要求。
然后把对角线右上和左下方的原素会换位置即可。

  1. package com.itheima;

  2. public class Main {
  3.         public static void main(String[] args) {
  4.                 int[][] matrix = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
  5.                 int row = matrix.length;
  6.                 int col = matrix[0].length;

  7.                 if (row != col) {
  8.                         System.out.println("impossible");
  9.                         return;
  10.                 }

  11.                 System.out.println("变换前:");
  12.                 for (int i = 0; i < row; ++i) {
  13.                         for (int j = 0; j < col; ++j)
  14.                                 System.out.print(matrix[i][j] + " ");
  15.                         System.out.println();
  16.                 }

  17.                 // 把对角线右上和左下方的原素会换位置
  18.                 for (int i = 0; i < row; ++i) {
  19.                         for (int j = i + 1; j < col; ++j) {
  20.                                 int tmp = matrix[i][j];
  21.                                 matrix[i][j] = matrix[j][i];
  22.                                 matrix[j][i] = tmp;

  23.                         }
  24.                 }
  25.                 System.out.println("变换后:");
  26.                 for (int i = 0; i < row; ++i) {
  27.                         for (int j = 0; j < col; ++j)
  28.                                 System.out.print(matrix[i][j] + " ");
  29.                         System.out.println();
  30.                 }
  31.         }
  32. }
复制代码

作者: 水果牛牛    时间: 2015-9-19 11:43
orgcheng 发表于 2015-9-19 10:44
首先要确保行列相等,不然达不到你的要求。
然后把对角线右上和左下方的原素会换位置即可。

厉害,学习了
作者: 大大大卷    时间: 2015-9-19 13:44
2楼的方法很对,但是我直接定义一个新数组,然后把这个新数组赋给原数组是不是更好理解?
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[][] arr ={{1,2,3,10},{4,5,6,11},{7,8,9,12},{13,14,15,16}};
  6.                 int x = arr[0].length;
  7.                 int y = arr.length;
  8.                 int[][] aft = new int[y][x];

  9.                 for (int i = 0;i < x;i++ )
  10.                 {
  11.                         for (int j = 0;j<y ;j++ )
  12.                         {
  13.                                 aft[j][i] = arr[i][j];
  14.                                 System.out.print(arr[j][i]);
  15.                         }
  16.                         System.out.println("");
  17.                 }
  18.                 arr = aft;

  19.         }
  20. }
复制代码

作者: orgcheng    时间: 2015-9-19 14:32
大大大卷 发表于 2015-9-19 13:44
2楼的方法很对,但是我直接定义一个新数组,然后把这个新数组赋给原数组是不是更好理解?
...

如果可以修改原数组,但是那个更省内存呢?
如果不可以,你的方法好。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2