[java]Exception in thread "main" [Résolu/Fermé]

Signaler
-
 domxaline -
Bonjour,
en compilant mon prg,j'ai un erreur message suivante:
Enter code number
1001
Enter number of items
193
Enter cost
452
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readLong(DataInputStream.java:416)
at java.io.DataInputStream.readDouble(DataInputStream.java:468)
at Inventory.main(Inventory.java:37)

import java.util.* 
import java.io.*; 
public class Inventory  
{ 
 static DataInputStream din=new DataInputStream(System.in); 
 static StringTokenizer st; 
  
 public static void main(String[]args)throws IOException 
 { 
  DataOutputStream dos=new DataOutputStream (new FileOutputStream("invent.dat")); 
   
   
  System.out.println("Enter code number"); 
  st=new StringTokenizer(din.readLine()); 
  int code=Integer.parseInt(st.nextToken()); 
   
  System.out.println("Enter number of items"); 
  st=new StringTokenizer(din.readLine()); 
  int items=Integer.parseInt(st.nextToken()); 
   
  System.out.println("Enter cost"); 
  st=new StringTokenizer(din.readLine()); 
  double cost=new Double(st.nextToken()).doubleValue(); 
   
   
  dos.writeInt(code); 
  dos.write(items); 
  dos.writeDouble(cost); 
  dos.close(); 
   
   
  DataInputStream dis=new DataInputStream(new FileInputStream ("invent.dat")); 
  int codeNumber=dis.readInt(); 
  int totalItems=dis.readInt(); 
  double itemCost=dis.readDouble(); 
  double totalCost=totalItems*itemCost; 
  dis.close(); 
   
   
  System.out.println("Code Number:"+codeNumber); 
  System.out.println("Item Cost:"+itemCost); 
  System.out.println("Total Items:"+totalItems); 
  System.out.println("Total Cost"+totalCost); 
 } 
} 

veuillez m'aidez svp

2 réponses

Messages postés
16192
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
27 janvier 2021
2 776
Il faut être cohérent dans le format de fichier !
Tu as "dos.write(items);" et "totalItems=dis.readInt();" qui ne correspondent pas.
Il faudrait plutôt écrire dos.writeInt(items);

PS : DataInputStream(System.in) c'est suspect, ajouté à ça le StringTokenizer et ça devient carrément moche ! Utilises plutôt la classe Scanner. Exemple :

private static Scanner clavier = new Scanner(System.in);

System.out.print("Enter code number : ");
int code = clavier.nextInt();

...
merci beaucoup,je l'ai corrigé