2015-12-28 2 views
-2

Je reçois cette exceptionJe reçois exception de format numérique pour ce code

Exception dans le thread "principal" java.lang.NumberFormatException: null
à java.lang.Integer.parseInt (Integer.java : 542)
à java.lang.Integer.parseInt (Integer.java:615)
à Test.main (Main.java:10)

Pour le code:

import java.util.*; 
import java.io.*; 
class Test { 
     public static void main (String[] args) throws IOException 
     { 
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
      int a[]=new int[10],flag=1; 
      System.out.println("Enter The Nos."); 
      for(int i=0;i<=9;i++) 
       a[i]=Integer.parseInt(br.readLine()); 
      int i=0; 
      do{ 

       if(a[i]!=42) 
        System.out.println(a[i]); 
       else{ flag=0;break; 

       } i++; 
      }while(flag==1); 
     } 
    } 

Il fonctionne bien sur Eclipse mais sur d'autres IDE, il donne cette exception.

+3

pouvez-vous me montrer votre entrée pour ce programme? –

+0

Le message d'exception est suffisamment clair. Qu'est-ce que tu ne comprends pas? – Raedwald

+0

Essayez le code dans ma réponse. Cela devrait faire l'affaire. – Atri

Répondre

0

La question est avec cette ligne a[i]=Integer.parseInt(br.readLine());

Vous devriez vérifier br.readLine() != null avant de faire la ligne ci-dessus. Vous essayez d'analyser null comme un nombre entier. C'est ce que l'erreur suggère.

Edit:
Selon les doc, readLine() rendements null si la fin du flux a été atteint.

Votre code devrait ressembler à ceci:

import java.util.*; 
import java.io.*; 
class Test { 
    public static void main (String[] args) throws IOException 
    { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     int a[]=new int[10],flag=1; 
     System.out.println("Enter The Nos."); 
     for(int i=0;i<=9;i++) { 
      String num = br.readLine(); 
      if(num != null) { 
       a[i]=Integer.parseInt(num); 
      } else { 
       //a[i] = 0; // You might want to assign a[i] to some integer if the input number is null 
      } 
     } 
     int i=0; 
     do{ 

      if(a[i]!=42) 
       System.out.println(a[i]); 
      else{ flag=0;break; } 
      i++; 
     }while(flag==1 && i < 10); 
    } 
} 
+0

Oui, mais _why_ est le flux qui arrive à zéro uniquement dans Eclipse? –

+0

Bien que rappelez NumberFormatException est levée si la chaîne ne contient pas un int parsable. Y compris null si, ce qui est le cas ici comme Ashutosh mentionné :) –

+0

Ce n'est pas le "flux à venir nul". Il s'agit plutôt de readline qui renvoie >> null. Et la raison en est documentée dans le javadoc: vous avez atteint la position de fin de flux. –

0

Exception est bien descriptif, vous essayez d'analyser null comme un int. . Faire un chèque nul avant invoquez parseInt() Il est bon de vérifier la capacité nulle de br comme

br.readLine() != null 

puis l'analyser. Votre entrée peut contenir un espace de sorte que java ne peut pas le convertir en un nombre, par exemple, "4 5", pour cela, vous pouvez remplacer tous les espaces par "", puis essayez de le convertir en nombre.

br.readLine().replaceAll("\\s+", ""); 

votre code sera ressembler comme ci-dessous,

import java.util.*; 
import java.io.*; 
class Test { 
    public static void main (String[] args) throws IOException 
    { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     int a[]=new int[10],flag=1; 
     System.out.println("Enter The Nos."); 
    if(br.readLine()!=null) 
    { 
     for(int i=0;i<=9;i++) { 
      String num = br.readLine().replaceAll("\\s+", ""); 
      if(num != null) { 
       a[i]=Integer.parseInt(num); 
      } else { 
       //a[i] = 0; // You might want to assign a[i] to some integer if the input number is null 
      } 
     } 
     int i=0; 
     do{ 

      if(a[i]!=42) 
       System.out.println(a[i]); 
      else{ flag=0;break; } 
      i++; 
     }while(flag==1 && i < 10); 
    } 
} 
} 
+0

Merci beaucoup. Mais ces 2 déclarations ne fonctionnent pas. Peut-être que je suis trop pauvre à cela. Pourriez-vous s'il vous plaît placer ces déclarations au bon endroit dans mon code –

+0

@Avneet Singh j'ai mis à jour le code dans ma réponse. – Zia