在Java中转置尺寸可变的2d数组 [英] Transpose a 2d Array with varying dimensions in Java

查看:96
本文介绍了在Java中转置尺寸可变的2d数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿,我正在尝试转置2d数组,该数组的行/列由用户输入。我在这个站点上到处都是,我看到的几乎所有建议都是关于方阵(2x2、3x3等)的。

Hey I'm trying to transpose a 2d Array who's rows/columns are inputted by the user. I've looked around on this site and pretty much all the advice I see is for square arrays (2x2,3x3, etc...)

这就是我所拥有的到目前为止

this is what I have so far

import java.util.Scanner;

public class ArrayTranspose {

public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);

    System.out.print("Input the number of rows (must be between 2 and 5): ");
    int rows = kb.nextInt();
    if ((rows < 2) && (rows > 5)) {
        System.out.println("Error: range must be between 2-5");
        rows = -1;
    }
    System.out.print("Input the number of columns (must be between 2 and 5): ");
    int cols = kb.nextInt();
    if ((cols < 2) && (cols > 5)) {
        System.out.println("Error: range must be between 2-5");
        cols = -1;
    }

    int myArray[][] = new int[rows][cols];

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            System.out.println("Enter a data value for (" + (i + 1) + ", " + (j + 1) + "): ");
            int value = kb.nextInt();
            myArray[i][j] = value;
        }
    }
    printArray(myArray);
    System.out.println();
    int newArray[][] = transpose(myArray);
    printNewArray(newArray);
}

public static void printArray(int myArray[][]) {
    int dim1 = myArray.length; // Gets the number of rows
    int dim2 = myArray[0].length; // Gets the number of columns

    for (int i = 0; i < dim1; i++) {
        for (int j = 0; j < dim2; j++) {
            System.out.printf("%4d", myArray[i][j]);
        }
        System.out.println();
    }
}

public static int[][] transpose(int myArray[][]) {
    int newArray[][] = new int[myArray[0].length][myArray.length];

    for (int i = 0; i < myArray.length; i++) {
        for (int j = 0; j < i; j++) {
            // swap element[i,j] and element[j,i]
            int temp = myArray[i][j];
            newArray[i][j] = temp;
        }
    }
    return newArray;
}

public static void printNewArray(int myArray[][]) {
    int dim1 = myArray.length; // Gets the number of rows
    int dim2 = myArray[0].length; // Gets the number of columns

    for (int i = 0; i < dim1; i++) {
        for (int j = 0; j < dim2; j++) {
            System.out.printf("%4d", myArray[i][j]);
        }
        System.out.println();
    }
}
}

当我运行程序时我得到这样的东西:

and when I run the program I get something like this:

输入行数(必须在2到5之间):2

Input the number of rows (must be between 2 and 5): 2

输入列数(必须在2到5之间):3

Input the number of columns (must be between 2 and 5): 3

输入(1,1)的数据值:

Enter a data value for (1, 1):

11

输入(1,2)的数据值:

Enter a data value for (1, 2):

12

输入(1,3)的数据值:

Enter a data value for (1, 3):

13

输入(2,1)的数据值:

Enter a data value for (2, 1):

21

输入数据值(2,2):

Enter a data value for (2, 2):

22

输入数据值(2,3 ):

Enter a data value for (2, 3):

23

11 12 13

21 22 23

0 0

21 0

0 0

所以看起来一切都很好(它知道转置数组的新维),但是转置数组中的数据值并没有全部号码是从原始数组输入的。

So it seems like everything is going well (it knows the new dimensions for the transposed array) but the data values in the transposed array dont take all the numbers in from the original array.

推荐答案

我只在这里简化一点:

public static int[][] transpose(int myArray[][]) {
    int newArray[][] = new int[myArray[0].length][myArray.length];

    for (int i = 0; i < newArray.length; i++) {
        for (int j = 0; j < newArray[i].length; j++) {
            newArray[i][j] = myArray[j][i];
        }
    }
    return newArray;
}

这篇关于在Java中转置尺寸可变的2d数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆