-2

Quelqu'un peut-il me dire pourquoi je reçois une erreur "NumberFormatException"? Mon programme me demande d'entrer 10 entiers, qui sont ensuite écrits dans un fichier, et peuvent être lus et moyennés ensemble.NumberFormatException (Java)

je peux entrée et écrire dans le fichier très bien, mais je reçois cette erreur:

Exception dans le thread « principal » java.lang.NumberFormatException: Pour chaîne d'entrée: « integer entrée: 1 » à java .lang.NumberFormatException.forInputString (source inconnue) at java.lang.Integer.parseInt (source inconnue) at java.lang.Integer.parseInt (source inconnue) à average.Average.readRecords (Average.java:99) à average.Moyen.Main (Average.java:29)

for (int i = 0 ; i < 10 ; i++) { 
      System.out.printf("Please enter integer %d: ", i+1); 
      numbers[i] = input.nextInt(); 

      { 
       try 
       { 
        output.format("Inputted integer: %s%n", String.valueOf(numbers[i])); 
       } 
       catch (FormatterClosedException formatterClosedexception) 
       { 
        System.err.println("Error writing to the file. Terminating."); 
        break; 
       } 
       catch (InputMismatchException inputMismatchException) 
       { 
        System.err.println("Please restart the program and enter integers ONLY."); 
        break; 
       } 
       catch (NumberFormatException numberFormatException) 
       { 
        System.out.print("Check for numbers.txt and see what ya got!"); 
       } 

code complet ...

import java.util.Scanner; 
import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.lang.SecurityException; 
import java.nio.file.NoSuchFileException; 
import java.util.Formatter; 
import java.util.FormatterClosedException; 
import java.util.NoSuchElementException; 
import java.util.InputMismatchException; 




public class Average { 

    private static Formatter output; 

    static Scanner input = new Scanner(System.in); 
    static int[] numbers = new int[10]; 

    public static void main(String[] args) 
     { 
      openFile(); 
      addRecords(); 
      closeFile(); 
      readRecords(); 
     // closeFile(); 
     } 
     public static void openFile() 
     { 
      try 
      { 
       output = new Formatter("numbers.txt"); 
      } 
      catch (SecurityException securityException) 
      { 
       System.err.println("Write permission denied. Terminating."); 
       System.exit(1); 
      } 
      catch (FileNotFoundException fileNotFoundException) 
      { 
       System.err.println("Error opening file. Terminating."); 
       System.exit(1); 
      } 
     } 
     public static void addRecords() 
     { 
      System.out.print("Hello, welcome to my program!\n"); 

      for (int i = 0 ; i < 10 ; i++) { 
       System.out.printf("Please enter integer %d: ", i+1); 
       numbers[i] = input.nextInt(); 

       { 
        try 
        { 
         output.format("Inputted integer: %s%n", String.valueOf(numbers[i])); 
        } 
        catch (FormatterClosedException formatterClosedexception) 
        { 
         System.err.println("Error writing to the file. Terminating."); 
         break; 
        } 
        catch (InputMismatchException inputMismatchException) 
        { 
         System.err.println("Please restart the program and enter integers ONLY."); 
         break; 
        } 
        catch (NoSuchElementException elementException) 
        { 
         System.err.println("Invalid input. Please try again."); 
         input.nextLine(); 
        } 
        catch (NumberFormatException numberFormatException) 
        { 
         System.out.print("Check for numbers.txt and see what ya got!"); 
        } 
        //System.out.print("? "); 
       } 
      } 
     } 
     public static void closeFile(){ 
      { 
       if (output != null) 
        output.close(); 
      } 
     } 
     public static void readRecords() 
     { 
      try (BufferedReader br = new BufferedReader (new FileReader("numbers.txt"))){ 
       String line; 
       int[] number = new int[10]; 
       int i=-1; 
       while((line = br.readLine())!= null){ 
        i++; 
        number [i] = Integer.parseInt(line); 
        System.out.println("number" +i+" = " +number[i]); 
       } 
      } 
      catch (NoSuchFileException noSuchFileException) 
      { 
       System.out.print("This file was not created properly and cannot be found."); 
      } 
      catch (IllegalStateException illegalStateException) 
      { 
       System.out.print("Error reading from file. Terminating"); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
} 
+0

Pourquoi ne pas utiliser simplement '% d'? – MadProgrammer

+1

Veuillez afficher une transcription réelle de la console avec vos entrées et sorties et la totalité de la trace de la pile. Je soupçonne que l'erreur est sur la ligne d'entrée après avoir entré '1'. –

+0

Rien dans ce que vous avez posté ici ne ressemble à ce qu'il pourrait lancer 'NumberFormatException'. Imprimez une trace de pile et vérifiez d'où elle vient. Mon pari est sur 'readRecords()', où vous essayez d'analyser les lignes de 'numbers.txt', mais ce n'est qu'une conjecture jusqu'à ce que vous développiez votre question. – azurefrog

Répondre

-1

Si vous utilisez une chaîne pour l'entrée, peut-être vous avez essayer d'utiliser mystring.trim() pour l'espace vide avant de tenter de l'analyser.

+2

Ceci devrait être un commentaire, pas une réponse.Je sais, vous n'avez pas le représentant.Ne pas abuser du système en affichant des commentaires comme des réponses.Cela rendra plus difficile d'obtenir le représentant nécessaire pour poster des commentaires –

1

Ainsi, le problème est en fait dans votre méthode readRecords, où vous lisez Inputted integer: 1 puis essayer d'analyser la valeur à un int, ce qui est évidemment pas

Vous devez extraire le numéro de votre texte, peut-être en utilisant quelque chose comme ...

while ((line = br.readLine()) != null) { 
    i++; 
    String[] split = line.split(":"); 
    line = split[1].trim(); 
    number[i] = Integer.parseInt(line); 
    System.out.println("number" + i + " = " + number[i]); 
} 
+0

Ay ça fonctionne vraiment très bien! Merci beaucoup! – Walby