2017-08-29 3 views
3

J'ai un problème lorsque l'on me demande de lire les jetons d'un fichier et d'imprimer trois valeurs: le nombre de jetons qui sont des nombres (doubles), le nombre de jetons ce ne sont pas des nombres, et la somme des nombres. et juste ces valeurs. J'ai réussi à lire le fichier texte, et j'ai pu les séparer en fonction du fait qu'ils soient en double ou pas, mais j'ai du mal à structurer ma sortie qui pour l'instant est juste la liste telle quelle, sauf que le non-doubles sont répertoriées en tant que tel où mon fichier texte est:Classe de scanner Java qui compte mes doubles et non-doubles

1 2 3 one two three 
    z 1.1 zz 2.2 zzz 3.3 zzzz 

Et mon code ressemble à:

 import java.util.Scanner; 
    import java.io.File; 
    import java.io.FileNotFoundException; 


    public class Lab1 { 

     public static void main(String[] args) { 

    Scanner in = null; 

    try { 
     in = new Scanner(new File("data.txt")); 
    } catch (FileNotFoundException e) { 
     System.err.println("failed to open data.txt"); 
     System.exit(1); 
    } 

    /** 
    * parse file token by token 
    */ 

    while (in.hasNext()) { 
     String token = in.next(); 
    // if it's a Double 
     try { 
      double d = Double.parseDouble(token); 
      System.out.println(+d); 
      continue; 
    } 
     catch (NumberFormatException e) { 

     // It's not a double: 

      System.out.println("Not a double"); 

    } 
    } 
} 

    } 

Et voici ma sortie:

1.0 
    2.0 
    3.0 
    Not a double 
    Not a double 
    Not a double 
    Not a double 
    1.1 
    Not a double 
    2.2 
    Not a double 
    3.3 
    Not a double 

Quand je veux que mon sortie soit ceci:

6 7 12.6 

Ce qui correspond au nombre de doubles, le nombre de non-double, et la somme des doubles respectivement.

Si je me trompe, pardonnez s'il vous plaît. Je cherche juste à réparer ma sortie.

Merci d'avance!

+0

Pourriez-vous clarifier ce que vous êtes bloqué sur ce qui vous empêche d'obtenir la sortie désirée? Il semble que vous ayez besoin de 3 variables pour suivre les 2 chiffres et la somme en cours. – 4castle

+0

Honnêtement, je suis juste confus sur ce qu'il faut faire après avoir commencé à analyser le fichier. J'ai pensé à faire int pour le nombre de doubles, int pour le nombre de non-doubles, double pour la somme des doubles. Je ne sais pas comment structurer cette idée. – RasecCesar

Répondre

1

Vous devez

  1. Définition de variables en haut de votre fonction main-rappelez-vous les comptes courants de doubles, non-doubles, et la somme totale des doubles.

    int doubles = 0; 
    int nonDoubles = 0; 
    double sumOfDoubles = 0.0; 
    
  2. Ajouter au double/non double/somme à chaque fois que vous avez lu à partir du fichier

    while (in.hasNext()) { 
        String token = in.next(); 
        try { 
         // try to convert string to double 
         double d = Double.parseDouble(token); 
         doubles += 1; 
         sumOfDoubles += d; 
        } catch (NumberFormatException e) { 
         // conversion failed - it's not a double 
         nonDoubles += 1; 
        } 
    } 
    
  3. Imprimez les comptes totaux à la fin de la fonction main. Notez que %.1f tronque à une décimale.

    System.out.printf("%d %d %.1f", doubles, nonDoubles, sumOfDoubles); 
    
+0

C'est exactement ce que je cherchais, merci beaucoup. – RasecCesar

1

Puisque vous avez déjà réussi à détecter lorsque l'entrée est un double et quand il est pas un double, vous pouvez simplement augmenter les compteurs, respectivement, lorsque chaque cas est atteint, et montrer la sortie après que vous J'ai fini de lire l'entrée. Par exemple:

import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 


public class Lab1 { 

    public static void main(String[] args) { 

     Scanner in = null; 

     try { 
     in = new Scanner(new File("data.txt")); 
     } catch (FileNotFoundException e) { 
     System.err.println("failed to open data.txt"); 
     System.exit(1); 
     } 

    /** 
    * parse file token by token 
    */ 

    // Added lines of code 
    int noOfDoubles = 0; 
    int noOfNonDoubles = 0; 

     while (in.hasNext()) { 
     String token = in.next(); 
     // if it's a Double 
     try { 
      double d = Double.parseDouble(token); 
      System.out.println(+d); 
      noOfDoubles++; 
      continue; 
     } 
     catch (NumberFormatException e) { 

     // It's not a double: 

      System.out.println("Not a double"); 
      noOfNonDoubles++; 

     } 
     } 

    System.out.println("No of doubles: " + noOfDoubles + ", " + 
     "No of non-doubles: " + noOfNonDoubles); 
    } 

} 

En ce qui concerne le calcul de la somme des doubles présentes, vous pouvez faire comme Bruce a suggéré dans sa réponse, ce qui est d'ajouter un autre compteur de façon similaire aux compteurs ci-dessus pour la somme. Toutefois, vous pouvez envisager d'utiliser BigDecimal à cause de ce problème: Java: Adding and subtracting doubles are giving strange results.