【问题标题】:Finding the largest number in an array of integers查找整数数组中的最大数
【发布时间】:2025-12-26 09:30:14
【问题描述】:

我正在尝试递归查找数组中的最大元素。用户必须输入数组将具有的元素数量。我的错误是,如果该列表没有大于列表中元素数的元素,则最大数字的输出将是列表中的元素数。例如:包含 {1 1 1 2 3} 的 5 个整数数组。答案是 5 而不是 3。

import java.util.*;

public class test7 {

    public static int findLargest(int[] a, int max) {

        int i=0, j=0, tempmax=0;
        if (a.length == 1) return a[0]>max ? a[0]:max;
        else if(max < a[i]){
            max = a[i];
            int[] tempArr = new int[a.length -1];
            for (i=1; i<a.length; i++){
                tempArr[j] = a[i];
                j++;
            }
            tempmax = findLargest(tempArr, max);
            return tempmax;
        }
        else{
            int[] tempArr = new int[a.length -1];
            for (i=1; i<a.length; i++){
                tempArr[j] = a[i];
                j++;
            }
            tempmax = findLargest(tempArr, max);
            return tempmax;
        }
}



    public static void main(String[] args) {
        int[] values = new int[100];

        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the number of elements in your list: ");
        int x = scan.nextInt();
        if(x>1 || x<100){
            for (int i=0; i<=(x-1); i++){
                System.out.print("Enter your number: ");
                System.out.println();
                values[i] = scan.nextInt();
            }       
            System.out.println();
            System.out.println("The largest number is: "+findLargest(values, x));
        }
        else System.out.println("The maximum number of elements must be less than 100");


    }
}

【问题讨论】:

  • 除了递归之外,您不应该一直使用findLargest(values, 0) 调用该方法吗?意思是,第一次调用应该传递 0 作为当前最大值(或者可能是最小的 int 值)
  • 如果递归不重要,可以选择偷懒又短的方式:java2s.com/Tutorial/Java/0140__Collections/…

标签: java arrays function methods


【解决方案1】:

试试这个工作示例:

public static void main(String[] args)
{
    int[] numbers = {2, 5134, 333, 123, 8466};

    int largest = numbers[0];
    for(int i = 1;i<numbers.length;i++)
    {
        largest = Math.max(largest, numbers[i]);
    }

    System.out.println("Largest number: "+largest);
}

作为一个看起来像这样的方法:

public static int max(int first, int... more)
{
    for(int element:more)
    {
        first = Math.max(first, element);
    }

    return first;
}

然后您可以使用 max(1,23,564,234,543); 之类的名称调用它

【讨论】:

  • 非常感谢,但我需要计算 .max 方法。
  • 所以你想要它作为可变参数方法?
【解决方案2】:

你调用你的方法:

System.out.println("The largest number is: "+findLargest(values, x))

这告诉它假设最大的数字是x 并尝试在列表中找到大于该数字的任何内容。当然,这会产生您描述的确切问题。

一般来说,在找到最大数时,您希望将候选者初始化为可能的最小数,或数组中的第一个数。

如果您初始化为可能的最小数字 (Integer.MIN_VALUE),那么一旦您开始您的算法,第一个数字肯定会比它大,并将被选为下一个最大的候选数字。

如果您初始化数组中的第一项,那么如果该数字是最高的,那么一切都很好。如果不是,那么当你遇到下一个更大的数字时,它就会成为候选,一切都很好。

您选择哪个取决于您(并且还取决于是否可以使用空数组),但要记住的是永远不要选择可能大于数组中所有元素的初始候选者。

【讨论】:

  • @denbuttigieg 如果答案有帮助,请考虑接受它(单击复选标记) - 这是 * 表达“谢谢,有帮助”的方式。