2016-04-06 13 views
-2

ich diese Fragen bekommen:Fehler !!! Number: Für Eingabestring: ""

java.lang.NumberFormatException: Für Eingabestring: ""
Exception in thread "main" java.lang.NullPointerException

System.out.println("Amount of elements to calculate: "); 
try 
{ 
    x = Integer.parseInt(br.readLine()); 
} 
catch(NumberFormatException | IOException z) 
{ 
    System.out.println("Error!!!"+z); 
} 

int [] n = new int[x]; 

das ist, wie ich die Werte des Arrays gerade lese:

for(int i=0; i<n.length; i++) 
    n[i] = Integer.parseInt(br.readLine()); 

das ist, wie ich die Methode aufrufen und das Array als Parameter

obj.asignar(n); 

und dies ist die Methode in meiner Klasse senden, in dem ich das Array laden:

private int[] num; 

public void asignar(int n[]) 
{ 

    for(int i=0; i<n.length; i++) 
    { 
     num[i] = n[i]; 
    } 
} 
+1

Was nicht zu tun ist Sie verstehen die Ausnahme und ihre Fehlermeldung? Was denkst du 'Für Eingabe-String:" "bedeutet? Wenn Ihr Problem bei der Eingabe liegt, fügen Sie bitte diese Eingabe und den gesamten relevanten Code ein, um das Problem zu reproduzieren. – Savior

+0

"" ist keine ganze Zahl. Wenn Sie versuchen, es zu analysieren, gibt es die Erwähnung Ausnahme.Überprüfen Sie vor dem Parsing oder haben Sie eine geeignete Ausnahmebehandlung – LearningPhase

+0

Sie erhalten eine NullPointerException oder eine NumberFormatException? Das sind verschieden. –

Antwort

2

Sie nicht eine ganze Zahl erhalten können von ein leerString:

Integer.parseInt(br.readLine()); // when br.readLine() is "" 

aber Sie können zwei gemeinsame Ansätze verwenden:

  1. überspringen die leerString s:

    String line = br.readLine(); 
    if (!"".equals(line)) { 
        x = Integer.parseInt(line); 
    } 
    
  2. Verwenden Sie einen Standardwert für den leeren String - wie 0:

    String line = br.readLine(); 
    x = "".equals(line) ? 0 : Integer.parseInt(line); 
    

    Sie können auch diese verallgemeinern nähern Sie sich, indem Sie eine neue Methode schreiben:

    static int parseInt(String s, int defaultValue) { 
        try { 
         return Integer.parseInt(s); 
        } catch (NumberFormatException e) { 
         return defaultValue; 
        } 
    } 
    

    , die unter Verwendung aufgerufen werden kann:

    x = parseInt(br.readLine(), 0); 
    

auf Ihren Kommentar Verwandte, ist es einfach so viele Elemente zu lesen, wie Sie wollen. Definieren Sie einfach einen total und es in einer for Schleife verwenden:

public static void main(String[] args) throws IOException { 

    int total = 3; 
    int n[] = new int[total]; 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

    for (int i = 0; i < total; i++) { 
     n[i] = Integer.parseInt(br.readLine()); // use the approaches above 
    } 

    System.out.println(Arrays.toString(n)); 
} 

ZB:

Wenn Sie Ihre Eingabe wird

1 
2 
3 

der Ausgang

[1, 2, 3]