2009-04-20 12 views
0

This est ma mission:Chaîne vide en format numérique

Voici mes questions:

  1. Comment puis-je corriger cette erreur:

Exception in thread "main" java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1012) at java.lang.Double.parseDouble(Double.java:527) at extracredit.Main.readData(Main.java:72) at extracredit.Main.main(Main.java:27)

  1. Y a-t-il d'autres problèmes que vous pouvez voir avec ce programme?

Voici mon code à ce jour:

import java.io.*; 
      import javax.swing.JOptionPane; 
      import java.util.*; 
      import java.util.StringTokenizer; 

      public class Main { 
    public static void main(String[] args) throws IOException { 
    String fname = "data.txt"; //Read in the data file for use in the array 
    String pass= JOptionPane.showInputDialog("Please enter the " + 
      "password to continue:"); /*Have the user enter the password to 
    access the file. */ 

    checkPass(pass); // Verify that the password is correct before continuing. 
    readData (fname); // Read data, print output and save output file. 

    } 


    private static void checkPass (String pass) 
    { 
    String password= "INF260"; 
    int passCount= 0; 
     if (pass.equals(password)) { 
     System.out.println("The password is correct. Continuing..."); 
     } 
     else { 
     do { 
      pass= JOptionPane.showInputDialog("Please re-enter the" + 
        "password:"); 
      passCount++; 
     } while (!pass.equals(password) && passCount < 2); 
      if (!pass.equals(password)) { 
      System.out.println("You have tried to enter the " + 
        "password too many times. Exiting..."); 
      System.exit(0); 
      } 
      else { 
       System.out.println("The password is correct. Continuing..."); 
      } 
     } 
    } 
     public static void readData (String data) throws IOException{   
      FileReader inputData= new FileReader (data); 
      BufferedReader findNum= new BufferedReader (inputData); 
      String str= findNum.readLine(); 

      int count=-1; 
      int countNum= 0; 
      double total= 0; 
      double min= 0; 
      double max= 0; 
      double average= 0; 

      FileWriter writeFile = new FileWriter("sales.txt"); 
      PrintWriter printFile = new PrintWriter(writeFile); 

      while (str != null) 
      { 
      double num= Double.parseDouble (str); 
      if (count == 0){ 
       countNum++; // counter of Reciepts to use 
       } 
      str = findNum.readLine(); 
     } 
      double [][] input = new double [countNum][10]; 
      total= getCurrentTotal(input); /*This will get the total 
      from the method getCurrentTotal.*/ 
      min= getCurrentMin(input); /*This will get the minimum value from 
      the method getCurrentMin.*/ 
      max= getCurrentMax (input); /*This will get the maximum value from 
      the method getCurrentMax.*/ 

      average= (total/countNum); //Calculate the average.  
      System.out.println("The List of Today's Sales:"); 
       for (int row = 0; row < input.length; row++){ 
        System.out.println(); 
        System.out.println("Customer " + row + "\t"); 
        for (int column = 0; column < input[row].length; column++){ 
         if (input [row].length < 10){   
         System.out.println(input[row][column] + "\t"); 
         str = findNum.readLine(); 
        }    
        else{ 
         System.out.println ("There are too many receipts" + 
           " for one Customer.\n"); 
         System.exit (0); 
        } 
       } 

      } 

    System.out.println ("There are " + countNum + "receipts in the list."); 
     /*This will print the total of receipts in the list.*/      
    System.out.println ("The total of today's sales is $" + total); /* 
     This will print the total of the sales for the day.*/ 
    System.out.println ("The average of today's sales is $" + average); /* 
     This will print the average sale total.*/ 
    System.out.println ("The highest receipt is $" + max); /* This will print 
     the highest sale.*/ 
    System.out.println ("The lowest receipt is $" + min); /* This will print 
     the lowest sale.*/ 
    Date date = new Date(); 
     System.out.println ("\n The current time is:" + date.toString()); /* This 
     will print the current date and time */ 

     } 



    public static double getCurrentTotal (double [][] input){ 
     double totalAmount = 0; 
     for (int row = 0; row < input.length; row++){ 
      for (int column = 0; column < input [row].length; column++){ 
       totalAmount += input [row][column]; 
      } 
     } 
     return totalAmount;  
    } 

    public static double getCurrentMin (double [][] input) {  
     double currentMin = input[0][0]; 
     for (int row = 0; row < input.length; row++){ 
      for (int column = 0; column < input [row].length; column++){ 
       if (currentMin > input[row][column]) 
        currentMin = input[row][column]; 
       }  
     } 
     return currentMin; 
    } 

    public static double getCurrentMax (double [][] input){  
     double currentMax = input[0][0]; 
     for (int row = 0; row < input.length; row++){ 
      for (int column = 0; column < input [row].length; column++){ 
       if (currentMax < input[row][column]){ 
        currentMax = input[row][column]; 
       } 
      }  
     } 
     return currentMax; 
    } 
} 
+3

Je ne pense pas qu'il soit approprié d'utiliser Stack Overflow pour obtenir une aide aussi spécialisée dans votre mission. Parlez à un assistant technique et étudiez vous-même si vous avez des difficultés avec une classe, puis passez à Stack Overflow pour obtenir de l'aide sur les problèmes précis auxquels vous avez consacré du temps, mais que vous ne parvenez pas à résoudre. – RossFabricant

+0

Je n'ai aucun problème dans ma classe, c'est juste une attribution de crédit supplémentaire. Mon professeur recommande vraiment notre cours sur ce site. J'ai posté le code que j'ai déjà écrit parce que je ne demande pas seulement des réponses et que je veux vraiment aider à résoudre ces problèmes. Ceci est juste un cours de programmation de base très basique, nous n'avons pas encore appris à faire certaines des choses présentées ci-dessus. Je pensais juste qu'il serait préférable d'étudier avec l'aide de meilleurs programmeurs que moi-même –

Répondre

1
// from your main method 
String fname = "data.txt"; 
readData (fname); 

// the method being called 
public static void readData (String data[][]){   
    BufferedReader br = new BufferedReader(new FileReader(data)); 

Nous avons une incompatibilité ici.

  • fname est une chaîne
  • La méthode prend une chaîne [] en tant que paramètre.
  • Le constructeur newFileReader() prend une chaîne et non un tableau 2d.

Tous ces trois devraient être du même type de données.

How can I separate each "receipt" with zero (like shown in the image link above)?

Vous ne devez pas. Vous devez lire à partir de ce fichier avec les zéros à l'intérieur.
Je vous recommande d'écrire une méthode quelque chose comme ceci:

public double [] readOneReceipt (BufferedReader reader);

Cette méthode devrait

  • ligne lue par ligne jusqu'à ce qu'il rencontre un 0 entrée
  • pour chaque entrée, il lit convertir la valeur en un nombre (deux?)
  • enregistrer le numéro temporaire structure.
  • Lorsque vous rencontrez le "0", créez un nouveau tableau de la bonne taille et copiez-y les valeurs lues.

How can I write the output into a separate file?

Avec un java.io.FileWriter

Le plus dur de cette OMI est le fait que vous avez dit de stocker les données dans un tableau 2D, mais vous pas exactement de quelle taille pour faire le tableau jusqu'à ce que vous avez lu les données. Cela signifie que vous utilisez une structure dynamique temporaire ou que vous lisez le fichier deux fois - une fois pour connaître le nombre de tickets reçus afin de pouvoir créer le tableau, puis relire les données de réception.

+0

Merci pour votre aide evnafets, je suis en train de le réparer dès maintenant. -Ava –

3

La meilleure solution est:

  • étude de votre matériel de cours
  • début d'un sous-ensemble du problème comme la simple lecture du fichier.
  • test, il
  • boucle
  • sur:
    • continuent d'améliorer et de renforcer le programme jusqu'à ce qu'il remplit toutes les exigences.
    • test, il
  • main dans
Questions connexes