簡體   English   中英

在數組中的每一列中查找最小值和最大值

[英]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 )進行初始化。 此外,在外循環中,將maxmin重置為列的第一個元素。

請按以下步驟操作:

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

筆記:

  1. 我已將r.nextInt(6)-5更改為r.nextInt(10) - 5以生成負數、0 和正數的混合,以便您可以快速驗證結果。 您可以根據需要將其改回r.nextInt(6)-5
  2. 我還使用printf而不是print來打印每個數字,空格為 4 個單位。 如果您願意,可以將其改回print
  3. 根本不需要使用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,並且會正確更新

在你的代碼中你混合了ij - 它應該是

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM