我正在使用在线ide geeksforgeeks。在这里,我试图使用TreeSet并传递Comparator对象来解决此问题。 qusetion如下:

您将得到一个大小为N的数组A。将每个元素替换为数组中的下一个最大元素(右侧最大的元素)。另外,由于最后一个元素旁边没有元素,因此将其替换为-1。

对t个测试用例执行以下操作:
这是我编写的代码:

import java.util.*;
import java.lang.*;
import java.io.*;

class GFG {
    static Scanner sc=new Scanner(System.in);
    public static void main (String[] args) {
        //code
        int t=sc.nextInt();
            for(int i=0;i<t;i++)
                display();
    }
    static void display(){
        int n=sc.nextInt();
        Set<Integer> ts=new TreeSet<Integer>(new myComparator());
        int a;
        for(int i=0;i<n;i++){
            a=sc.nextInt();
            ts.add(a);
        }
        Iterator itr=ts.iterator();
        int count=0;
        while(itr.hasNext()){
            if(count==0)
                continue;
            else{
                System.out.print(itr.next()+" ");
            }
        }
        System.out.print(-1);
        System.out.println();
    }
}
class myComparator implements Comparator<Integer>{
    public int compare(Integer obj1,Integer obj2){
        if(obj2>obj1)
            return 1;
        else if(obj2<obj1)
            return -1;
        else
            return 0;
    }
}


我的代码抛出的错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at GFG.display(File.java:20)
    at GFG.main(File.java:13)


请更正代码。
Code

最佳答案

这是因为display()中的for循环会迭代到n,这是元素的值,而不是找到的元素数。

所以在你的代码中

int n=sc.nextInt();


“ n”成为值887

for(int i=0;i<n;i++){


迭代84次(传入的元素数),然后抛出此异常,因为它无法进行进一步处理(尝试达到887)。因此

java.util.NoSuchElementException


因为没有更多的元素可以使用nextInt()

10-07 22:32