所以我允许用户输入一个3乘3的数组然后代码应该接受数组并按列对整数进行排序。如:
[15,87,37,
55,5,22,
30,12,40]
变成了
[15,5,22,
30,12,37,
55,87,40]
这是我的方法似乎不适用于列。它是按行排序?
my_app.exe
我对编码不是很熟悉所以我不会100%理解我看到有些人使用的比较器,而不是.sort。如果有人能够帮助我解决这个问题会很好。谢谢。
答案 0 :(得分:1)
如何先移植它,然后对组件数组进行排序然后转置回来?
答案 1 :(得分:1)
基本上你要做的是用每个其他数组的相同索引对每个数组进行排序,这不是简单内置于Java的内容。您必须转置数组。该解决方案允许您在矩阵上运行时可能需要的未来操作。基本上,这意味着:
[row][column] => [column][row]
在此表单中,可以按照您希望的方式逐个对数组进行排序,然后将其转换回原始表单以提供预期结果。
您需要为此编写代码。或者,您可以查找已经进行转置的库。有许多矩阵库,例如JAMA。
答案 2 :(得分:0)
为什么不创建一个临时数组来将列转换为行,然后对单个行进行排序并将已排序的行设置回原始数组。
像:
min-width:0
答案 3 :(得分:0)
假设用户总是输入3乘3,当您获得用户输入时,只需存储不同的数组,以便更容易排序。基于列而不是行存储矩阵。你可以这样做:
Scanner scan = new Scanner(System.in);
int[] col1 = new int[3];
int[] col2 = new int[3];
int[] col3 = new int[3];
for (int i=0; i<3; i++){ //Store based on column not row
col1[i] = scan.nextInt();
col2[i] = scan.nextInt();
col3[i] = scan.nextInt();
}
int[][] matrix = new int[3][3];
matrix[0] = col1;
matrix[1] = col2;
matrix[2] = col3;
for (int i=0; i<3; i++){ //Sort columns
Arrays.sort(matrix[i]);
}
//The following code is used to print your array properly by rows instead of columns
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
System.out.print(matrix[j][i]+" ");
}
System.out.println();
}
按列排序后,您可以将矩阵转换回按行存储,以便在需要时更容易打印。
如果您想让用户设置矩阵的大小以使其动态化,您可以执行以下操作:
Scanner scan = new Scanner(System.in);
int N = 3; //Size of matrix, You can have user input this as well.
int[][] matrix = new int[N][N];
for (int n=0; n<N; n++){ //Initialize Columns
for (int column=0; column<N; column++){
matrix[column][n] = scan.nextInt(); //Store based on column
}
}
for (int i=0; i<N; i++){ //Sort columns
Arrays.sort(matrix[i]);
}
//The following code is used to print your array properly by rows instead of columns
for (int i=0; i<N; i++){
for (int j=0; j<N; j++){
System.out.print(matrix[j][i]+" ");
}
System.out.println();
}
答案 4 :(得分:0)
这是一个适用于你的cas的解决方案。要按列排序,我按列检索值,然后将这些值存储到数组列表中并对其进行排序,并将排序后的值存储回列中(反转循环)。
public static void main(String[] args) {
int[][] x = new int[][]{{15,87,37},{55,5,22},{30,12,40}};
ArrayList<Integer> a = new ArrayList<>();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
a.add(x[j][i]);
}
Collections.sort(a);
for (int k = 0; k < 3; k++) {
x[k][i] = a.get(k);
}
a = new ArrayList<>();
}
//for loop for testing purpose
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(x[i][j] + ",");
}
System.out.println("\n");
}
}
15,5,22,
30,12,37,
55,87,40,