查找Java中第三大否

查找Java中第三大否,java,arrays,Java,Arrays,我对这个简单的程序有点困惑。我必须在数组中找到第三大no。我已经做了一些代码,但在第三大no中只得到第二大no没有问题,因此请建议我这个解决方案的错误: class ArrayExample { public static void main(String[] args) { int secondlargest = Integer.MIN_VALUE; int thirdlargest = Integer.MIN_VALUE; int la

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

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);
    }
}
类数组示例{
公共静态void main(字符串[]args){
int secondmaxist=整数.MIN_值;
int thirdlargest=Integer.MIN_值;
int最大=整数.MIN_值;
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入数组值:”);
int arr[]=新的int[5];
对于(int i=0;i
只需在整个数组中循环,并跟踪最大的三个数字


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

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


我想试试这样的方法:

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(最大
未测试,但我认为第二个IF不再需要

代码说明:


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

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

详情如下:

例如:

    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]);
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入数组值:”);
int arr[]=新的int[5];
对于(int i=0;i
用于(int i=0;i
使用
整数
数组,然后使用
集合对其排序
,只需选择所需的元素:

代码: 因此,现在选择第三个larget编号为
list.get(list.size()-3))


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

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

 if (secondlargest < arr[i] && largest != arr[i]) {
                thirdlargest = secondlargest;
                secondlargest = arr[i];
                if (thirdlargest < arr[i] && secondlargest != arr[i])
                    thirdlargest = arr[i];
            }
if(第二大
问题是您正在将thirdLargest设置为第二大,这已经被确定为小于arr[i]。然后,您将测试thirdLargest是否小于arr[i](在外部条件下,它被设置为第二大),然后将其设置为arr[i]。请尝试删除

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

如果这不起作用,尝试添加第三个单独的条件,以涵盖arr[i]小于第二个最大值但大于第三个最大值的情况。(参见上面的Jens回答),类似于:

集合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));
if(firstmax尝试此代码

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]);
}   
publicstaticvoidmain(字符串[]args){
int arr[]={67,56,87,42};
对于(int i=0;i
package algo;
公共类最大数{
公共静态void main(字符串参数[]){
int arr[]=新的int[]{5,2,3,4,6};
int最大=整数。最小值;;
int secondmaxist=整数.MIN_值;;
int thirdLargest=Integer.MIN_值;;

对于(int i=0;iYou可以简单地对数组进行排序并返回
数组[2]
(如果它是降序的)@assylias你是对的,但效率要低得多。老实说,我认为OP并不关心这一点。这是家庭作业吗?如果是-提到它,它将帮助我们更好地引用问题,否则你可能会得到基于更高级算法(排序、选择、最小堆)的解决方案@假设位置1和2的数字是相同的值怎么办?@andycark那么它们仍然是第二和第三大数字!我认为循环是OP尝试的。为什么?如果要排序,请使用
Arrays.sort()
。无需创建包装(
Integer
)对象和数组,而不是将数组转换为列表。只是想给出一个
Collections
答案。另外,OP希望了解集合的简单程度。感谢您的编辑,这是
if (thirdlargest < arr[i] && secondlargest != arr[i])
                        thirdlargest = arr[i];
    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));
        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];
        }
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]);
}   
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);
    }

}