从java中的整数数组获取相同值的最大和第二大数字?

时间:2015-01-21 12:20:06

标签: java arrays sorting

这里我已经编写了代码来打印来自array的最大和第二大数字。但是当我在我的数组中有两次最大数字时,它的打印最大和第二大同样。可以告诉我我在哪里犯错误这是我的代码。

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
    int largest = arr[0];
    int secondLargest = arr[0];
    // check the condition
    for (int i = 0; i < arr.length; i++) {
        // this condition check for largest number
        if (arr[i] > largest) {
            secondLargest = largest;
            largest = arr[i];

        } else if (arr[i] > secondLargest) {
            secondLargest = arr[i];

        }
    }
    // print the result
    System.out.println("second largest number is:" + secondLargest);
    System.out.println("largest number is:" + largest);

输出如下:

second largest number is:96
largest number is:96

4 个答案:

答案 0 :(得分:1)

有两个问题:

1)初始化最大和第二大(使用Integer.MIN_VALUE);您在第一次迭代时设置第二大,它是数组中最大的数字

2)设置secondLargest的条件;你还应该检查:arr [i]&lt;最大

    int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
    int largest = Integer.MIN_VALUE;
    int secondLargest = Integer.MIN_VALUE;
    // check the condition
    for (int i = 0; i < arr.length; i++) {
        // this condition check for largest number
        if (arr[i] > largest) {
            secondLargest = largest;
            largest = arr[i];
        } else if (arr[i] > secondLargest && arr[i] < largest) {
            secondLargest = arr[i];
        }
    }

输出:

second largest number is:92
largest number is:96

答案 1 :(得分:0)

您正在将largestsecondLargest初始化为数组的第一个元素,因此如果第一个元素已经是最大元素,那么两个元素最终都会保持最大值。

更好的初始化是将它们设置为一个真正的小值:

int largest = Integer.MIN_VALUE;
int secondLargest = Integer.MIN_VALUE;

答案 2 :(得分:0)

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};

有两个数字,其值为96.因此,在96&gt;之后96失败,它达到了arr [i]&gt;的条件。 secondLargest并通过该测试。这就是为什么你将最大和第二个最大数字作为相同的数字,96。

答案 3 :(得分:0)

这是使用binarySearch的解决方案

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
Arrays.sort(arr);
int largest = arr[arr.length - 1];
int binarySearch = Arrays.binarySearch(arr, largest);
System.out.println("largest        = " + largest);
// need to handle the case for arrays which are...
// - empty
// - contain only one int
// - the largest int is on index zero
System.out.println("second largest = " + arr[binarySearch - 1]);