此计划的NZEC错误原因?

时间:2015-02-26 17:13:46

标签: java algorithm sorting arraylist runtime-error

我有一个问题,我需要找到用户输入的第二个最大元素。这是一个在线练习问题,当我提交代码时,我无法弄清楚为什么服务器会回应NZEC错误。有人能告诉我我的代码的哪一部分容易出现这样的错误以及我如何处理这个错误?

Sample Input:=                Sample Output:=

2                             7
1 3 5 7 8 -1                  16
12 23 16 0 2 -1

P.S-第一个输入是测试用例的数量。第二和第三输入分别是实际用户输入。用户输入始终以-1结束。

这是我的代码:=

class SecondLargest {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int testcase=Integer.parseInt(sc.nextLine());

        while(testcase-->0){
            ArrayList<Long> al=new ArrayList<>();
            long num=0;
            long i=0;
            while((num=(sc.nextLong()))!=-1){
                al.add(num);
                i++;
            }
            Collections.sort(al);
            if(al.size()==0){
                System.err.println("");
            }
            else if(al.size()==1){
                System.out.println(al.get(0));
            }
            else if(al.size()>1){
            System.out.println(al.get((int)(al.size()-2)));
            }
        }
        }
    }

PSS-大输入集将用于测试程序。

2 个答案:

答案 0 :(得分:0)

如果你只传递一个/零元素,那么你将在第一行得到索引超出范围的异常:

System.out.println(al.get((int)(i-2)));//negative scenario where you might be expected to return -1?

答案 1 :(得分:0)

    else if(al.size()==1){
      System.out.println(al.get(0));
    }

找不到第二个最大元素,但唯一的元素是最大元素!

将if / elseif块更改为

    if(al.size()<2){
        System.err.println("");
    } else {
        System.out.println(al.get((int)(al.size()-2)));
    }