LinkedList: Collections.max() выбрасывает исключение NoSuchElementException
Я не повторяю LinkedList
с помощью любых средств, таких как сканер или другие методы, я использую Collections.max()
чтобы получить максимальное количество от LinkedList
,
Я прочитал о переполнении стека, что это исключение возникает из-за итератора, сканера или токенизатора, но я не использую ни одного из них.
import java.io.*;
import java.util.*;
class TLG {
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
LinkedList<Integer> first = new LinkedList<Integer>();
LinkedList<Integer> second = new LinkedList<Integer>();
int cases = Integer.parseInt(br.readLine());
for(int i=1;i<=cases;i++) {
String score = br.readLine();
int number1 = Integer.parseInt(score.split(" ")[0]);
int number2 = Integer.parseInt(score.split(" ")[1]);
int diff = number1 - number2;
if(diff > 0){
first.add(diff);
}
else {
second.add(java.lang.Math.abs(diff));
}
}
Integer max1 = Collections.max(first); // Getting Exception here
Integer max2 = Collections.max(second); // Getting Exception here
if(max1 > max2) {
System.out.println(1+" "+max1);
}
else {
System.out.println(2+" "+max2);
}
}
}
3 ответа
Решение
/**
* Returns the maximum element of the given collection, according to the
* <i>natural ordering</i> of its elements. All elements in the
* collection must implement the <tt>Comparable</tt> interface.
* Furthermore, all elements in the collection must be <i>mutually
* comparable</i> (that is, <tt>e1.compareTo(e2)</tt> must not throw a
* <tt>ClassCastException</tt> for any elements <tt>e1</tt> and
* <tt>e2</tt> in the collection).<p>
*
* This method iterates over the entire collection, hence it requires
* time proportional to the size of the collection.
*
* @param coll the collection whose maximum element is to be determined.
* @return the maximum element of the given collection, according
* to the <i>natural ordering</i> of its elements.
* @throws ClassCastException if the collection contains elements that are
* not <i>mutually comparable</i> (for example, strings and
* integers).
* @throws NoSuchElementException if the collection is empty. <---------------
* @see Comparable
*/
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Вы не проверяете пустой случай: так Collections.max()
будет бросать NoSuchElementException
Сначала проверьте, является ли какой-либо из списков пустым (тогда вы знаете максимум и какой список предоставляет его)
Integer max;
int list;
if (first.isEmpty()) {
max = Collections.max(second);
list = 2;
} else if (second.isEmpty()) {
max = Collections.max(first);
list = 1;
} else {
Integer max1 = Collections.max(first);
Integer max2 = Collections.max(second);
if (max1 > max2) {
max = max1;
list = 1;
} else {
max = max2;
list = 2;
}
}
System.out.println(list + " " + max);