5

我对这个简单的程序有点困惑。我必须在数组中找到第三大的否。我已经做了一些代码,但在第三大没有问题时只得到了第二大没有问题,所以请建议我这个解决方案有什么问题:

class ArrayExample {
    public static void main(String[] args) {
        int secondlargest = Integer.MIN_VALUE;
        int thirdlargest = Integer.MIN_VALUE;
        int largest = Integer.MIN_VALUE;
        Scanner input = new Scanner(System.in);
        System.out.println("Enter array values: ");
        int arr[] = new int[5];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();
            if (largest < arr[i]) {
                secondlargest = largest;
                largest = arr[i];
            }
            if (secondlargest < arr[i] && largest != arr[i]) {
                thirdlargest = secondlargest;
                secondlargest = arr[i];
                if (thirdlargest < arr[i] && secondlargest != arr[i])
                    thirdlargest = arr[i];
            }

        }
        System.out.println("Second Largest number is: " + secondlargest
                + "\nThird largest number is=====" + thirdlargest);
    }
}
4

13 回答 13

12

我会尝试这样的事情:

if (largest < ar[i]) {
    thirdlargest = secondlargest;
    secondlargest = largest;
    largest = arr[i];
} else if (secondlargest < ar[i]) {
    thirdlargest = secondlargest;
    secondlargest = ar[i];
} else if (thirdlargest < ar[i]) {
    thirdlargest = ar[i];
}

未经测试,但我认为不再需要第二个 IF。

代码说明:

我们正在验证如果输入的数字大于最大值,则将第三、第二和第一最大值向上移动一级。如果输入的值大于第二大且小于最大值,则将 3 和 2 上移一级。如果输入的值大于第 3 大且小于第 2 大,则将第 3 大移动到输入的值。

于 2012-09-05T10:48:52.383 回答
4

集合 API。这是一个例子:

    List list = Arrays.asList(new Integer[] {1, 2, 29, 4, 28, 6, 27, 8});
    Collections.sort(list);
    System.out.print(list.get(list.size()-3));
于 2012-09-05T11:13:15.620 回答
2
        if(firstLargest<array[num])
        {
            thirdLargest=secondLargest;
            secondLargest=firstLargest;
            firstLargest = array[num];
        }

        else if((secondLargest<array[num])&&(array[num]!=firstLargest))
        {
            thirdLargest=secondLargest;
            secondLargest = array[num];
        }

        else if((thirdLargest<array[num])&&(array[num]!=secondLargest))
        {
            thirdLargest = array[num];
        }
于 2014-06-24T23:56:05.520 回答
1

使用 java 列表,对其进行排序。取第三个元素。

java.util.Collections.sort()

于 2012-09-05T10:46:58.617 回答
1
for (int i = 0; i < arr.length; i++)
 {
        arr[i] = input.nextInt();
        if (largest < arr[i]) {
            secondlargest = largest;
            largest = arr[i];
            continue;
        }
        if (secondlargest <= arr[i] && largest > arr[i])
        {
            thirdlargest = secondlargest;
            secondlargest = arr[i];
            continue;
        }
        if (thirdlargest <= arr[i] && secondlargest > arr[i])
        {
                thirdlargest = arr[i];
        }

 }
于 2012-09-05T10:52:52.153 回答
1

使用Integer数组,然后使用它进行排序,然后Collections选择您需要的元素:

代码:

System.out.println("Enter array values: ");
Integer arr[] = new Integer[5];
for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();
}
List<Integer> list = Arrays.asList(arr);
Collections.sort(list);
System.out.println(list);

输出是:

[0, 1, 2, 3, 6]

所以,现在选择第三个大数作为list.get(list.size()-3))

您还可以对集合进行反向排序。检查它的文档

于 2012-09-05T10:54:29.720 回答
1

如果您希望该代码正常工作,我认为问题出在:

 if (secondlargest < arr[i] && largest != arr[i]) {
                thirdlargest = secondlargest;
                secondlargest = arr[i];
                if (thirdlargest < arr[i] && secondlargest != arr[i])
                    thirdlargest = arr[i];
            }

问题是您将thirdLargest 设置为secondLargest,它已被确定为小于arr[i]。然后,您将测试thirdLargest 是否小于arr[i](保证它在外部条件中被设置为第二大),然后将其设置为arr[i]。尝试删除

if (thirdlargest < arr[i] && secondlargest != arr[i])
                        thirdlargest = arr[i];

如果这不起作用,请尝试添加第三个单独的条件来覆盖 arr[i] 小于 secondGreatest 但大于 thirdGreatest 的情况。(请参阅上面的 Jens 回答),例如:

于 2012-09-05T10:59:56.720 回答
0

只需循环遍历整个数组并跟踪三个最大的数字。

或者您可以对其进行排序,然后从顶部返回第三个元素。

于 2012-09-05T10:46:16.933 回答
0

读入数组后,只需在数组上调用 Arrays.sort(array) (在您的情况下为 Arrays.sort(arr); )。这会将其排序为升序,然后您只需检索元素 arr.length-2

完整描述在这里: http: //www.homeandlearn.co.uk/java/sorting_arrays.html

例子:

    Scanner input = new Scanner(System.in);
            System.out.println("Enter array values: ");
            int arr[] = new int[5];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = input.nextInt();
        }
    Arrays.sort(arr);
System.out.println("Second Largest number is: " + arr[4]
                + "\nThird largest number is=====" + arr[3]);
于 2012-09-05T10:51:24.817 回答
0

试试这个代码,

public static void main(String[] args) {

    int arr[] = {67, 56, 87, 42};

    for (int i = 0; i <arr.length - 1; i++) {
        if (arr[i] < arr[i + 1]) {
            int swap = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = swap;       
        }
    }

    System.out.println("third highest element is: " + arr[2]);
}   
于 2016-04-20T07:07:52.433 回答
0
package algo;

public class LargestNumbers {

    public static void main(String args[]){
        int arr[] = new int[]{5,2,3,4,6};

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


        for(int i=0;i<arr.length;i++){

              if(largest<arr[i])
                {
                    thirdLargest=secondLargest;
                    secondLargest=largest;
                    largest = arr[i];
                }

               else if((secondLargest<arr[i])&&(arr[i]!=largest))
                {
                    thirdLargest=secondLargest;
                    secondLargest = arr[i];
                }

               else if((thirdLargest<arr[i])&&(arr[i]!=secondLargest))
                {
                    thirdLargest = arr[i];
                }

        }//for


         System.out.println("Numbers are: " + largest + " "  + secondLargest
                    + "\nThird largest number is=====" + thirdLargest);
    }

}
于 2017-07-17T13:17:21.980 回答
0
package arrays;

import java.util.Arrays;
public class ArraythirdHighestvalues {
    //method 1 
    public static  int highest(int []arr,int length)
    {
        int temp;
        for(int i=0;i<length;i++)
        {
            for(int j=i+1;j<length;j++)
            {
                if(arr[i]>arr[j])
                {
                    temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        return arr[length-2];
    }
    public static void main(String[] args) {
        int arr[]= {1,3,5,6,7,2,};
        System.out.println(highest(arr,arr.length));
        System.out.println("method 2 to find array second higest element value --");
        Arrays.parallelSort(arr);
        System.out.println(arr[arr.length-3]);
        
        
        
    }
    
}
于 2021-10-02T08:23:06.643 回答
0

包算法;

公共类 LargestNumbers {

public static void main(String args[]){
    int arr[] = new int[]{5,2,3,4,6};

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


    for(int i=0;i<arr.length;i++){

          if(largest<arr[i])
            {
                thirdLargest=secondLargest;
                secondLargest=largest;
                largest = arr[i];
            }

           else if((secondLargest<arr[i])&&(arr[i]!=largest))
            {
                thirdLargest=secondLargest;
                secondLargest = arr[i];
            }

           else if((thirdLargest<arr[i])&&(arr[i]!=secondLargest))
            {
                thirdLargest = arr[i];
            }

    }//for


     System.out.println("Numbers a`enter code here`re: " + largest + " "  + secondLargest
                + "\nThird largest number is=====" + thirdLargest);
}

}

于 2021-10-02T11:14:44.267 回答