我被這個問題困住了。我需要計算矩陣中每一列的負數奇數之和,并按升序排序。我寫了所有的方法來創建/填充/列印矩陣,但我不知道如何實作排序演算法。
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in)。
int size = scanner.nextInt()。
int[][] array = Main.fillMatrix(size)。
Main.printMatrix(array);
Main.sortMatrix(array);
Main.printMatrix(array);
}
public static int getRandomNumberUsingNextInt(int min。int max) {
Random random = new Random()。
return random.nextInt(max - min) min;
}
public static void printMatrix(int[][] matrix){
for (int i = 0; i< matrix.length; i ) {
for (int j = 0; j < matrix.length; j ) {
System.out.print(matrix[i][j] " ") 。
}
System.out.println("")。
}
}
public static int[][] fillMatrix(int size) {
int[][] matrix = new int[size][size] 。
for (int i = 0; i< size; i ) {
for (int j = 0; j < size; j ) {
matrix[i][j] = Main.getRandomNumberUsingNextInt(-10, 10)。
}
}
return矩陣。
}
static void sortMatrix(int[] [] matrix) {
}
uj5u.com熱心網友回復:
由于矩陣是正方形的,需要按列排序,所以可能更好的解決方式是這樣的:
static void transpose(int[] [] arr) {
for (int i = 0, n = arr.length; i < n; i ) {
for (int j = i 1; j < n; j ) {
int t = arr[i][j] 。
arr[i][j] = arr[j][i];
arr[j][i] = t。
}
}
}
- 使用
Comparator::comparingInt以及一個計算負奇數總數的函式對轉置的矩陣進行逐行排序 。
public static int sumNegOdd(int[] row) {
return Arrays.stream(row).filter(x -> x % 2 == -1).sum()。
}
- 再次對排序后的矩陣進行轉置,并將行還原為列 。
public static int[][] sort(int[] [ arr] ) {
transpose(arr)。
int[][] res = Arrays.stream(arr)
.sorted(Comparator.comparingInt(MyClass::sumNegOdd))
.toArray(int[][]:new)。
transpose(res)。
return res。
}
測驗:
int[][] arr = makeMatrix(5) 。
System.out.println("----
before")。)
printMatrix(arr)。
arr = sort(arr);
System.out.println("----
后")。)
printMatrix(arr)。
輸出:
----
之前
-7 -3 0 -8 6
-8 5 0 -2 -9
0 9 -7 -7 0
-1 -6 9 -1 9
8 0 -9 -2 0
----
后
0 6 -7 -8 -3
0 -9 -8 -2 5
-7 0 0 -7 9
9 9 -1 -1 -6
-9 0 8 -2 0
附加的實用方法:
static int[][] makeMatrix(int n) {
Random r = new Random();
return IntStream.range(0, n)
.mapToObj(i -> r.ints(n, -9, 10) .toArray()
.toArray(int[][]:new)。)
}
static void printMatrix(int[] [] arr) {
for (int i = 0; i < arr.length; i ) {
for (int j = 0; j< arr[i].length; j ) {
System.out.printf("% 2d"/span>, arr[i][j])。
}
System.out.println()。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332773.html
標籤:
下一篇:來自資料框架的字典的字典
