2017-12-05 2 views
0

Ich versuche, eine Utility-Klasse erstellen nehmen Eingaben von der Standard-Console mit java.util.ScannerScanner: Exception in thread "main" java.util.NoSuchElementException

package dbasics; 

import java.util.*; 


public class Utils { 

    public static int getNumericInput() { 
     System.out.println("Enter a integer "); 
     Scanner scanner = new Scanner(System.in); 
     int n = scanner.nextInt(); 
     scanner.close(); 
     return n; 
    } 

    public static int[] getNumericArrayInput(int n) { 
     //System.out.println("Enter "+n+" integers seperated by a whitespace "); 
     int[] numbers = new int[n]; 
     Scanner scanner = new Scanner(System.in); 
     for (int i = 0; i < n; i++) { 
       numbers[i] =scanner.nextInt(); 
      } 

     scanner.close(); 
     return numbers; 
    } 

} 

Während Aufruf der statische Methoden in einer anderen Klasse die Methode getNumericInput() funktioniert gut, aber die folgende Methode getNumericArrayInput(int n) führt zu einer Ausnahme.

package dbasics; 

public class Demo { 

    public static void main(String[] args) { 

     int n = Utils.getNumericInput(); 
     System.out.println("Number "+n); 
     int arr[] = Utils.getNumericArrayInput(n); 
     for(int i : arr) { 
      System.out.println(i); 
     } 
    } 

} 

Rennen ergibt sich folgende Ausnahme

Enter a integer 
5 
Number 5 
Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at dbasics.Utils.getNumericArrayInput(Utils.java:21) 
    at dbasics.Demo.main(Demo.java:9) 

Die intresting, was ich bemerkt habe ist, wenn ich Eingang das Array den ersten Eingabeprozedur kommentieren Sie funktioniert gut

+0

lesen Sie sollten immer versuchen Sie mit <> mit Ressourcen für die Klassen wie Scanner, die sind schließbar. Es ist möglich, dass Ihr erster Aufruf den Eingabestream schließt, wenn er geschlossen wird. – Dragonthoughts

Antwort

0

In der erste Methode, schließen Sie nicht die scanner

+0

Wird dies nicht zu einem Leck führen? – Paras

+0

Nein, es ist nicht, Sie haben immer noch Elemente über den Stream zu konsumieren, warum sollte es geschlossen werden? –

+0

Da es verschließbar ist, sollte es geschlossen sein, wenn es den Rahmen verlässt. – Dragonthoughts

1

Sie sind Scanner in Ihrer Funktion zu schließen, die in Ausnahme verursacht: Try this:

import java.util.*; 


class Utils { 

    public static int getNumericInput() { 
     System.out.println("Enter a integer "); 
     Scanner scanner = new Scanner(System.in); 
     int n = scanner.nextInt(); 
     return n; 
    } 

    public static int[] getNumericArrayInput(int n) { 
     int[] numbers = new int[n]; 
     Scanner scanner = new Scanner(System.in); 
     for (int i = 0; i < n; i++) { 
       numbers[i] =scanner.nextInt(); 
      } 

     scanner.close(); 
     return numbers; 
    } 

} 
public class cn { 

    public static void main(String[] args) { 

     int n = Utils.getNumericInput(); 
     System.out.println("Number "+n); 
     try{ 
     int arr[] = Utils.getNumericArrayInput(n); 

     for(int i : arr) { 
      System.out.println(i); 
     } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     } 
    } 

Für weitere Informationen wenden Sie sich bitte this link

Verwandte Themen