我收到运行时异常,我不知道是什么原因造成的

I am getting a runtime exception and i do not know what's causing it

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

给你一个大小为 N 的数组 A。用数组中下一个最大的元素(右边最大的元素 side)替换每个元素。另外,由于最后一个元素旁边没有元素,所以将其替换为 -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

java.util.NoSuchElementException只有在输入控制台耗尽时才有可能。

除此之外,if(count==0) 在上面的代码中将始终为真,否则将永远不会执行块。

无法重现 NoSuchElementException,但是,您的代码包含无限循环,因为您从不使用迭代器中的元素:

while(itr.hasNext()){
    if(count==0)
        continue;
    else {
       System.out.print(itr.next()+" ");
    }
}

假设这个问题已经解决,代码运行起来,还有其他问题:

  • 使用 Set 会导致输入数据丢失
  • 使用反向比较器改变输出顺序
  • 您的代码似乎没有生成包含 -1
  • 的输出数组

应用这些修复和测试后

Iterator itr=ts.iterator();
int count=0;
while(itr.hasNext()){
    if (count == 0) {
        itr.next();
        count++;
    } else {
        System.out.print(itr.next() + " ");
    }
}
System.out.print(-1);
System.out.println("\nEND" + ts);

已检索到以下结果:

input n:

5

20 20 30 40 40

30 20 -1
END[40, 30, 20]

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

所以在你的代码中

int n=sc.nextInt();

'n' 变为值 887

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

迭代84次(传入的元素个数),然后抛出这个异常,因为它不能再继续下去了(试图达到887)。因此

java.util.NoSuchElementException

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