本帖最后由 王清华0 于 2013-9-24 23:30 编辑
问题出现在你这一句:- newarrs[i]=newarr;//一维数组作为一个元素放入二维数组内。
复制代码 数组是引用类型啊!!!
当你的newarr[0]=newarr的时候,你的newarrs[0]这个一维数组引用指向了newarr,下一次当你的newarr改变时,newarrs[0]也就变了。
同理,你后面的newarrs[1]和newarrs[2]这两个一维数组都指向了newarr,那么最终结果就是三行都变成了:369
只要将这个过程改成单独的数组内元素赋值就可以了。注意34行和35行- public class Arrayhlhuhuan {
- /**
- * 二维数组的行列互换
- */
- public static void main(String[] args) {
- int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
- sop(arr);
- System.out.println("---------------------------------------------");
- int [][]newarrs=huan(arr);
- sop(newarrs);
- }
- private static void sop(int[][] arr) {
- for (int i = 0; i < arr.length; i++) {
- for (int j = 0; j < arr[i].length; j++) {
- System.out.print(arr[i][j] + "\t");
- }
- System.out.println();
- }
-
- }
- private static int[][] huan(int[][] arr) {
- int row = arr.length;//行数
- int low = arr[0].length;//列数
- int[][] newarrs = new int[low][row];//新建数组
- int[] newarr = new int[row];//一维数组,容量为原数组的行数
- for (int i = 0; i < low; i++) {//列循环
- for (int j = 0; j < row; j++) {//行循环
- int data = arr[j][i];
- newarr[j] = data;//原数组每一列装入一维数组内。
- }
- //newarrs[i]=newarr;//一维数组作为一个元素放入二维数组内。
- Tool.change(newarrs[i], newarr);
- sop1(newarrs[i]);
- System.out.println();//测试二维数组装入的元数。
- }
- System.out.println("---------------------");
- for (int i = 0; i < newarrs.length; i++) {
- sop1(newarrs[i]);
- }
- System.out.println("---------------------");
- return newarrs; //返回交换后的数组
- }
- private static void sop1(int[] newarr) {
- for (int i = 0; i < newarr.length; i++) {
- System.out.print(newarr[i]+"\t");
- }
- }
- }
- class Tool
- {
- public static void change(int[] a,int[] b)
- {
- for(int i=0;i<b.length;i++)
- {
- a[i] = b[i];
- }
- }
- }
复制代码 |