首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中转置具有不同维数的二维数组

在Java中转置具有不同维数的二维数组
EN

Stack Overflow用户
提问于 2017-05-01 01:01:32
回答 2查看 642关注 0票数 0

嘿,我正在尝试转置一个二维数组,它的行/列是由用户输入的。我在这个网站上看了看,我看到的几乎所有的建议都是关于正方形数组(2x2,3x3,等等)

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

代码语言:javascript
复制
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();
    }
}
}

当我运行这个程序时,我得到的结果如下:

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

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

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

11

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

12

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

13

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

21

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

22

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

23

11 12 13

21 22 23

0%0

21 0

0%0

所以看起来一切都很顺利(它知道转置数组的新维数),但是转置数组中的数据值并不接受原始数组中的所有数字。

EN

回答 2

Stack Overflow用户

发布于 2017-05-01 01:28:23

代码语言:javascript
复制
    public static int[][] transpose(int myArray[][]) {
    int newArray[][] = new int[myArray[0].length][myArray.length];

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

希望这能有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2017-05-01 01:30:34

我在这里只做了一点简单的事情:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43708992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档