[英]Finding min and max value in each column in array
我的程序有問題。 我想在每一列中打印 min 和 max,但它不能正常工作。 我想一切都應該沒問題。 當循環結束時,我重新啟動最小值和最大值。
public class tablice2 {
public static void main(String[] args){
int t [][] = new int [5][5];
int n [] = new int [5];
int x [] = new int [5];
Random r = new Random();
int min = t[0][0];
int max = t[0][0];
for (int i = 0; i <t.length ;i++){
min = 0;
max = 0;
for(int j = 0; j < t[i].length ;j++){
t[i][j] = r.nextInt(6)-5;
System.out.print(t[i][j] + " ");
if (t[j][i] < min){
min = t[j][i];
}
if (t[j][i] > max){
max = t[j][i];
}
}
n[i]=min;
x[i]=max;
System.out.println(" ");
}
for(int p=0;p<x.length;p++){
System.out.println("Max Column "+p + ": " +x[p] );
}
for(int k=0;k<n.length;k++){
System.out.println("Min Column "+k + ": " +n[k]);
}
}
}
您已將min
初始化為零,我建議使用Integer.MIN_VALUE
。 否則無法“找到”正值。
這也是有人已經為您解決的問題,例如通過流:
assertThat(
IntStream.of(new int[] { 1, 2, 3, 4, 5 }).max().getAsInt(),
is(5));
不要同時輸入和排序,因為元素可能仍然使用默認值(即0
)進行初始化。 此外,在外循環中,將max
和min
重置為列的第一個元素。
請按以下步驟操作:
import java.util.Random;
public class Main {
public static void main(String[] args) {
int t[][] = new int[5][5];
int n[] = new int[5];
int x[] = new int[5];
Random r = new Random();
int min;
int max;
for (int i = 0; i < t.length; i++) {
for (int j = 0; j < t[i].length; j++) {
t[i][j] = r.nextInt(10) - 5;
System.out.printf("%4d", t[i][j]);
}
System.out.println();
}
for (int i = 0; i < t.length; i++) {
min = t[0][i];
max = t[0][i];
for (int j = 0; j < t[i].length; j++) {
if (t[j][i] < min) {
min = t[j][i];
}
if (t[j][i] > max) {
max = t[j][i];
}
}
n[i] = min;
x[i] = max;
}
for (int p = 0; p < x.length; p++) {
System.out.println("Max Column " + p + ": " + x[p]);
}
for (int k = 0; k < n.length; k++) {
System.out.println("Min Column " + k + ": " + n[k]);
}
}
}
示例運行:
3 -4 2 0 1
-2 -2 4 -1 -2
-3 1 4 -1 0
-4 4 -2 -5 2
-5 -3 -3 -4 -1
Max Column 0: 3
Max Column 1: 4
Max Column 2: 4
Max Column 3: 0
Max Column 4: 2
Min Column 0: -5
Min Column 1: -4
Min Column 2: -3
Min Column 3: -5
Min Column 4: -2
筆記:
r.nextInt(6)-5
更改為r.nextInt(10) - 5
以生成負數、0 和正數的混合,以便您可以快速驗證結果。 您可以根據需要將其改回r.nextInt(6)-5
。printf
而不是print
來打印每個數字,空格為 4 個單位。 如果您願意,可以將其改回print
。Integer.MAX_VALUE
和/或Integer.MIN_VALUE
來解決這個問題。如有任何疑問,請隨時發表評論。
您的第一個循環必須在列(j)上。
t[0].length
首先在循環中將min
設置為min = Integer.MAX_VALUE
並與max = Integer.MIN_VALUE
類似。 這將為我們提供每個隨機數(至少)小於初始化的最小值(和最大值類似)
在這種情況下,您的抽獎號碼是從 -5 到 0,因此您可以將最小設置為 -6 和最大 1,然后您確定抽獎號碼將高於 -6 且小於 1,並且會正確更新
在你的代碼中你混合了i
和j
- 它應該是
if (t[i][j] < min){
min = t[i][j];
}
同樣在其余代碼中
同樣,當您在 Java 中創建數組時,它會自動用 0 初始化。 所以
int t [][] = new int [5][5];
int min = t[0][0];
表示min = 0
因為所有數組都由 0 填充,因此您不必復制代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.