0

этот код для печати LinkedList и работает отлично в Eclipse: -Класс HackerRank Сканер Java

import java.util.Scanner; 

public class HackerAss { 
    static Scanner scan; 
    static Node head; 
    static Node current; 
    public static void main(String[] args) { 
     int q=1,count=0; 
     while(q==1){ 
      scan = new Scanner(System.in); 
      q = scan.nextInt(); 
      if(q==0) 
       break; 
      else{ 
       int element = scan.nextInt(); 
       if(count == 0) 
        current = new Node(element); 
       else{ 
        head = new Node(element); 
        head.node = current; 
        current = new Node(element); 
       } 
      } 

      count++; 
      } 
     while(head!=null){ 
      System.out.println(head.data); 
      head=head.node; 
     } 

     } 


    static class Node{ 
     int data; 
     Node node; 
     public Node() { 
      data=0; 
      node=null; 
     } 
     public Node(int data) { 
      this.data=data; 
      node=null; 
     } 

    }} 

Но в HackerRank он показывает ошибки: -

Исключение в потоке "основной" java.util .NoSuchElementException

Какая причина ошибки и какое решение. У меня есть Представление для отправки.

ответ

2

Ваша проблема исходит из вашего кода, а не из вашей IDE.

Во-первых, вы должны определить сканер сразу:

while(q==1){ 
    scan = new Scanner(System.in); 
    q = scan.nextInt(); 
    ... 
} 

Это действительно плохая идея, обусловленно вы даже не знаете, если есть что-то в потоке, вы должны были использовать сканер, как это:

scan = new Scanner(System.in); 
while(scan.hasNextInt()){ 
    q = scan.nextInt(); 
    ... 
} 

После года java.util.NoSuchElementException исходят из того, что вы называете nextInt() дважды:

scan = new Scanner(System.in); 
q = scan.nextInt(); 
... 
int element = scan.nextInt(); 

В доке nextInt() бросить java.util.NoSuchElementException, когда вход разряжена: https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt%28%29

1

Эта ошибка возникает из nextInt(). Вы должны избегать этого с условием, как указано ниже в коде

import java.util.Scanner; 

public class HackerAss { 
    static Scanner scan; 
    static Node head; 
    static Node current; 
    public static void main(String[] args) { 
     int q=1,count=0; 
     scan = new Scanner(System.in); 
     while(q==1){ 

      if(scan.hasNextInt()) { 
       q = scan.nextInt(); 
      } 
      if(q==0) 
       break; 
      else{ 
       if(scan.hasNextInt()) { 
        int element = scan.nextInt(); 
       } 
       if(count == 0) 
        current = new Node(element); 
       else{ 
        head = new Node(element); 
        head.node = current; 
        current = new Node(element); 
       } 
      } 

      count++; 
      } 
     while(head!=null){ 
      System.out.println(head.data); 
      head=head.node; 
     } 

     } 


    static class Node{ 
     int data; 
     Node node; 
     public Node() { 
      data=0; 
      node=null; 
     } 
     public Node(int data) { 
      this.data=data; 
      node=null; 
     } 

    }} 
+1

Также 'сканирование = новый сканер (System.in);' должно быть перемещено из 'while' петель – Solorad