如何从数组中的数字中找到最大和最小数字[重复]

Posted

技术标签:

【中文标题】如何从数组中的数字中找到最大和最小数字[重复]【英文标题】:How to find the max and min numbers from numbers in an array [duplicate] 【发布时间】:2021-06-14 21:02:42 【问题描述】:

我正在制作一个从 1-100 生成随机数的数组。然后,最后,我将从列表中输出最大和最小数字。但是,我不确切知道如何查找/调用我尝试使用 Math.min() 等数学方法函数的最大和最小数字,但我认为它不适用于数组。这是我的代码(下划线是我认为我会调用最大和最小数字但我不知道该怎么做的地方)。

public class MaxMin 

public static void main(String[] args) 

    int max = 0;
    int min = 0;
    int hold = 0;
    System.out.println("#" + "\t\t" + "Number");
    int[][] numberArray= new int [10][1];
    for(int i=0;i<10;i++)
    
        System.out.print((i+1)+"\t\t");
        for(int j=0;j<1;j++)
        
            numberArray[i][j] = (int)(Math.random()*100)+1;
            System.out.print(numberArray[i][j] + "\t\t");
        
        System.out.println();
    
    System.out.println("Max: " + "\t\t" + ______);
    System.out.println("Min: " + "\t\t" + ______);


【问题讨论】:

这能回答你的问题吗? Finding min element in an array 【参考方案1】:

当您生成随机数时,您应该将它与您的最小和最大变量进行比较,如果它大于最大值或小于最小值,您应该更新这些变量的值,如下所示:

for (int j=0;j<n;j++)

    numberArray[i][j] = (int)(Math.random()*100)+1;
    if (numberArray[i][j] > max)
        max = numberArray[i][j];
    if (numberArray[i][j] < min)
        min = numberArray[i][j];
    System.out.print(numberArray[i][j] + "\t\t");

这样可以避免多次遍历数组。 另外,请考虑如何初始化 max 和 min 变量。您可以在循环之外生成随机数并将第一个值分配给 max 和 min,因为如果将 min 初始化为零并且只生成正整数,例如 min 将永远不会改变。 您应该在代码开头将 max 初始化为最小值(在本例中为 0),并将 min 初始化为最大值。

【讨论】:

感谢您的帮助!它现在可以工作了:)【参考方案2】:

如果它只有一列,那么您可以创建另一个临时数组并使用排序数组

Arrays.sort(arrayname);

/通过

for (int i = 0; i < arrayname.length; i++)   
  
    for (int j = i + 1; j < arrayname.length; j++)   
      
        int tmp = 0;  
        if (arrayname[i] > arrayname[j])   
          
            tmp = arr[i];  
            arrayname[i] = arrayname[j];  
            arrayname[j] = tmp;  
          
      

然后

arrayname[0] 是最小数字和 arrayname[arrayname.length -1] 是最大数量

或者如果有多个列那么

数组[m][n]

for(int i = 0; i < n; i++)
    for(int j = 0; j < m; j++)
        for(int k = 0; k < m - 1 - j; k++) 
            if(array[k][i] > array[k + 1][i])
                int temp = array[k][i];
                array[k][i] = array[k + 1][i];
                array[k + 1][i] = temp;
            
        
    

【讨论】:

排序并不是最好的方法。充其量是一个 O(n log(n)) 操作,上面显示的排序实际上是 O(n^2)。您可以通过在 O(n) 时间内对元素进行详尽搜索来找到最小值和最大值。

以上是关于如何从数组中的数字中找到最大和最小数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中查找数组中的最小和最大数

找到给定范围内数字的最大最小差

如何在文件处理中从文本文件中找到每一行的最小值和最大值?

尝试交换数组中的最大和最小数字

给定 n 个数字的最小和最大 10 个数字

程序正在从文件中读取最大的数字,但不是最小的