所以到目前为止我得到了这个代码:
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 是最大的数字。我该如何解决这个问题?
使用
Arrays.sort(array);
并获取第二个元素。
将第二个
放在第一个 if 条件之外。if condition
因为
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;
您可以首先使用 Collections.max() 函数找到 ArrayList 中的最大数量,一旦获得最大元素,找到该元素的索引并将其从数组中删除。再次使用 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);
如果需要更多详细信息,请告诉我。
使用两个for循环。第一个应该找到最大的数字,并存储其索引位置。第二个应该找到与先前找到的数字不在同一索引位置的最大数字。 (这将确保您不会错过第二大数字与最大数字相同的情况。)
如果您认为合适,请使用
Arrays.sort(array);
并按照 ɐuıɥɔɐɯ 的建议获取第二个元素。
import java.util.Arrays;
import java.util.List;
public class second_highest_array {
public static void main(String[] args) {
//List<Integer> numlist = Arrays.asList(9,8,7,6,5,4,3,2,1,0);
//List<Integer> numlist = Arrays.asList(0,1,2,3,4,5,6,7,8);
//List<Integer> numlist = Arrays.asList(8,7,4,1,2,3,4,1,9,0,11,9,8);
List<Integer> numlist = Arrays.asList(9,-8,5,4,1,7,3,2,6);
int highestnum = numlist.get(0);
int secondhighest = numlist.get(0);
for(int numarr : numlist) {
if(highestnum < numarr ) {
secondhighest = highestnum ;
highestnum = numarr;
}else if(secondhighest < numarr && highestnum != numarr) {
secondhighest = numarr;
}else if(secondhighest == highestnum) {
secondhighest = numarr;
}
}
System.out.println("highest : "+highestnum +" :: Second Highest : "+secondhighest);
}
}
无需排序和线性解:
public int compute3(List<Integer> list) {
int max = 0, secondMax = Integer.MIN_VALUE, pre = 0;
for(int i=0; i<list.size(); i++) {
pre = max;
if(list.get(i)>max) {
max = list.get(i);
}
if(list.get(i)<max && list.get(i)>secondMax ) {
secondMax = list.get(i);
} else if(pre>secondMax && pre<max){
secondMax = pre;
}
}
return secondMax;
}
在循环的第一个
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);
}
}
}
HashSet integers = new HashSet<>(arrayList);
ArrayList arrayList1 = new ArrayList(integers);
return (int) arrayList1.get(arrayList1.size()-2);