我得到一个运行时异常,我不知道是什么原因造成的。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我得到一个运行时异常,我不知道是什么原因造成的。相关的知识,希望对你有一定的参考价值。
我正在使用一个在线思想 geeksforgeeks. 在这里,我试图使用TreeSet和传递一个比较器对象来解决这个问题。问题如下。
给你一个大小为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)
请修改代码程式碼
答案
这是因为你的for循环在 display()
迭代到 n
是元素的值,而不是找到的元素数量。
所以在你的代码中
int n=sc.nextInt();
'n'成为值887
for(int i=0;i<n;i++){
迭代84次(传递进来的元素数量),然后抛出这个异常,因为它不能再继续下去了(试图到达887)。因此
java.util.NoSuchElementException
因为没有更多的元素了,可以使用 nextInt()
另一答案
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]
以上是关于我得到一个运行时异常,我不知道是什么原因造成的。的主要内容,如果未能解决你的问题,请参考以下文章
运行我的测试日志记录代码时,我得到一个窗口,上面写着“发生了 Java 异常”