第二高的数字ArrayList

时间:2015-10-07 18:03:40

标签: java algorithm arraylist

所以我到目前为止得到了这段代码:

        int secondLargest = list.get(0);
        int largest = list.get(0);
        for (int i = 0; i < list.size(); i++)
        {
            if(list.get(i) > largest)
            {
                secondLargest = largest;
                largest = list.get(i);

                if(list.get(i) > secondLargest && list.get(i) != largest)
                {
                    secondLargest = list.get(i);
                }
            }
        }

        System.out.print("Second biggest number ");
        return secondLargest;       

问题在于我使用此代码时 (清单是:)

    list2.add(1);
    list2.add(2);
    list2.add(10);
    list2.add(9);
    list2.add(8);
    list2.add(7);

第二个最高数字的“搜索”在2处停止,因为10是最高数字。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:6)

使用Arrays.sort(array);并获取第二个元素。

答案 1 :(得分:2)

使用两个for循环。第一个应该找到最大的数字,并存储其索引位置。第二个应该找到与先前找到的数字不在同一索引位置的最大数字。 (这将确保您不会错过第二大数字与最大数字相同的情况。)

如果您认为合适,请使用Arrays.sort(array);并按照ɐuıɥɔɐɯ的建议获取第二个元素。

答案 2 :(得分:1)

您可以首先使用Collections.max()函数在ArrayList中找到最大数字,一旦有了max元素,找到该元素的索引并从数组中删除它。再次使用Collections.max()查找数组中的第二大数字。代码如下

ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
al.add(3);
al.add(4);
System.out.println(al);

int j = Collections.max(al);

System.out.println("Max in the array is " + j);
al.remove(al.indexOf(j));
int max2 = Collections.max(al);
System.out.println(max2);

如果需要更多细节,请告诉我。

答案 3 :(得分:0)

  

将第二个if condition放在第一个if条件之外。

由于second largest小于largest,因此您永远不会在检查最大值的if块中找到它。

int secondLargest = (int) list.get(0);
int largest = list.get(0);
for (int i = 1; i < list.size(); i++) {
  if(list.get(i) > largest) {
    secondLargest = largest;
    largest = list.get(i);
  }
  if(list.get(i) > secondLargest && list.get(i) != largest) {
    secondLargest = list.get(i);
  }
}
System.out.print("Second biggest number ");
return secondLargest;

答案 4 :(得分:0)

在循环的第一个if statement内,检查second largest而不是largest。以下内容将帮助您

    int secondLargest = list.get(0);
    int largest = list.get(0);
    for (int i = 0; i < list.size(); i++)
    {
        if(list.get(i) > secondLargest)
        {
            if(list.get(i) > largest ) {
                secondLargest = largest;
                largest = list.get(i);
            } else {
                secondLargest = list.get(i);
            }

        }
    }