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();
}
}
}
Pourquoi ne pas utiliser simplement '% d'? – MadProgrammer
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'. –
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