2016-07-16 4 views
-2

Nicht sicher, ob etwas anderes wegen dieses Fehlers funktioniert, der mich festgefahren hat. Ich lese aus der TXT-Datei "customerOrders.txt" und versuche, Produktbestellungen pro Kunde zu zählen. Die Anzeigemethoden sind nicht fertig, aber die Formatierung sollte nicht das Problem sein. Wie bekomme ich diese java.lang.NumberFormatError? Fehle ich gerade etwas?Array-Datei IO-Projekt kompiliert, wird aber nicht ausgeführt. Java.lang.NumberFormatError-Lösung erhalten?

txt-Datei umfasst:

1,First1,Last1,3 
101,Product1,1,2000.00 
102,Product2,3,500.00 
103,Product3,1,1000.00 
2,First2,Last2,2 
102,Product2,3,500.00 
103,Product3,1,1000.00 
3,First3,Last3,1 
104,Product4,1,1500.00 
4,First4,Last4,4 
101,Product1,1,2000.00 
102,Product2,3,500.00 
103,Product3,1,1000.00 
104,Product4,1,1500.00 
5,First5,Last5,1 
101,Product1,2,2000.00 

Fehler tritt bei der Linie: Product = Integer.parseInt (fin.nextLine());

import java.util.ArrayList; 
import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter; 
/** 
* 
*/ 
public class Main 
{ 
    // TODO: declare the ArrayList of Customer objects. 
    private static ArrayList<Customer> customer = new ArrayList<>(); 



public static void main(String[] args) 
{ 
    // read the customer and order records from the file. 
    populateCustomersFromFile("customerOrders.txt"); 

    // display total number of orders and total amount owed. 
    displayOrderSummary(); 

    // display each customer and their orders 
    displayCustomerOrders(); 

    // write the customer and order details to the file. 
    writeCustomersToFile("customerOrdersOut.txt"); 
} 

// TODO: implement the populateCustomersFromFile method. 
public static void populateCustomersFromFile(String filename){ 
    try (Scanner fin = new Scanner(new File(filename))) { 
     String record; 
     String[] fields; 
     String[] productFields; 
     ProductOrder[] productOrder; 

     int productCount; 
     while (fin.hasNext()) { 
      record = fin.nextLine(); 
      fields = record.split(","); 

      productCount = Integer.parseInt(fin.nextLine()); 
      productOrder = new ProductOrder[productCount]; 

      for (int product = 1; product <= productCount; product++) { 
       record = fin.nextLine(); 
       productFields = record.split(","); 

       productOrder[product - 1] = new ProductOrder(productFields[0], 
                  productFields[1], 
                  Integer.parseInt(productFields[2]), 
                  Double.parseDouble(productFields[3])); 
      } 

      customer.add(new Customer (fields[0], 
             fields[1], 
             fields[2], 
             Integer.parseInt(fields[3]), 
             productOrder) 
             ); 



     } 
    }catch (FileNotFoundException e) { 
     System.err.println("Error: Unable to find file: "); 
     System.exit(1); 
    } 
} 

// TODO: implement the displayOrderSummary method. See screen cast in README file for output. 
public static void displayOrderSummary(){ 
    System.out.println("Order Summary:"); 
    System.out.println("----------------"); 
    for (Customer c : customer){ 
     System.out.println("Orders: " + c); 
    } 
} 

// TODO: implement the displayCustomerOrders method. See screen cast in README file for output. 
public static void displayCustomerOrders(){ 
    System.out.println("Customer Orders:"); 
    System.out.println("----------------"); 

} 

// TODO: implement the writeCustomersToFile method. See customerOrdersOut.txt for format. 
public static void writeCustomersToFile(String filename) { 
    try (PrintWriter pw = new PrintWriter(filename)) { 
     for (Customer c : customer) { 
      pw.println(c.getCid() + "," + 
         c.getFirst() + "," + 
         c.getLast() + "," + 
         c.getNumberOfOrders()); 

      pw.println(c.getProductOrder().length);   

      for (ProductOrder po : c.getProductOrder()) { 
       pw.println(po.getPid() + "," + 
          po.getDescription() + "," + 
          po.getQty() + "," + 
          po.getCost()); 
      } 
     } 

    } catch (FileNotFoundException e) { 
     System.err.println("Error - unable to write to file."); 
     System.exit(1); 
    } 
} 
} 
+0

Ohne die Eingabedaten anzuzeigen, die zu dem Fehler führt, kann niemand Ihnen helfen. –

+0

oops eine sec customerOrders.txt ist 1, First1, Last1,3 101, Product1,1,2000.00 102, Product2,3,500.00 103, Product3,1,1000.00 2, first2, Last2,2 102, Product2,3,500.00 103, Product3,1,1000.00 3, First3, Last3,1 104, Product4,1,1500.00 4, First4, Last4,4 101, Product1,1,2000.00 102, Product2,3,500.00 103, Produkt3,1,1000,00 104, Produkt4,1,1500,00 5, First5, Last5,1 101, Produkt1,2,2000.00 Fehler tritt in der Zeile productCount auf = Integer.parseInt (fin.nextLine()); hoffe das hilft. –

+0

Zeigen Sie die Eingabedaten an, die den Fehler verursachen. –

Antwort

0

In der Zeile

productCount = Integer.parseInt(fin.nextLine()); 

Sie versuchen, die gesamte Zeile als eine ganze Zahl zu analysieren, die nicht eindeutig arbeiten. Sie haben die Zeile zuvor in Felder aufgeteilt. Sie sollten analysieren

productCount = Integer.parseInt(fields[0]); 
+0

Danke! Das hat dieses Problem behoben. Macht es Ihnen etwas aus, ein anderes Problem zu klären? Ich entschuldige mich, Parsing ist neu für mich. Der Fehler tritt jetzt für Integer.parseInt (productFields [2]), Dies ist innerhalb der for-Schleife und ist die Zeichenfolge "Last2" aus der Textdatei, die als eine ganze Zahl gezählt werden sollte –

Verwandte Themen