我收到运行时异常,我不知道是什么原因造成的
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()
我正在使用在线 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()