J'utilise une idée en ligne geeksforgeeks . Ici, j'essaie de résoudre cette question en utilisant TreeSet et en passant un objet Comparator. La requête est la suivante:
On vous donne un tableau A de taille N. Remplacez chaque élément par le plus grand élément suivant (le plus grand élément sur son côté droit) dans le tableau. De plus, comme il n'y a pas d'élément à côté du dernier élément, remplacez-le par -1.
Faites ceci pour t cas de test: Voici le code que j'ai écrit:
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)
L'erreur que mon code génère:
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; } }
Veuillez rectifier le code. Code
3 Réponses :
java.util.NoSuchElementException n'est possible que lorsque la console d'entrée est épuisée.
En dehors de cela, if (count == 0)
sera toujours vrai dans le code ci-dessus et le bloc else ne sera jamais exécuté.
Impossible de reproduire NoSuchElementException
, cependant, votre code contient une boucle sans fin car vous ne consommez jamais d'éléments dans l'itérateur:
30 20 -1 END[40, 30, 20]
En supposant que ce problème est résolu, et le code s'exécute, il y a d'autres problèmes:
Lors de l'application de ces correctifs et des tests
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);
les résultats suivants ont été récupérés:
input n: code>
5
20 20 30 40 40
while(itr.hasNext()){ if(count==0) continue; else { System.out.print(itr.next()+" "); } }
p>
C'est parce que votre boucle for dans display ()
itère vers n
qui est la valeur de l'élément, pas le nombre d'éléments trouvés.
Donc dans votre code
java.util.NoSuchElementException
'n' devient la valeur 887
for(int i=0;i<n;i++){
Itère 84 fois (le nombre des éléments passés), puis lève cette exception car elle ne peut pas aller plus loin (en essayant d'atteindre 887). D'où
int n=sc.nextInt();
Parce qu'il ne reste plus d'éléments à utiliser avec nextInt()
Que dit le javadoc pour NoSuchElementException?
Est-ce que cela répond à votre question? Le scanner ignore nextLine () après avoir utilisé next () ou nextFoo ( )?