J'essaie de lire dans un fichier texte avec les numéros de compte et les soldes. Je lis les numéros de compte sous forme de chaîne et les soldes sous forme de double, mais j'obtiens tous les zéros pour les soldes au lieu des valeurs réelles.

Voici à quoi ressemble le fichier:

0015      112.34
0020     4000.00
0034     9345.89
0069      723.50
0085     1500.00
0091     8237.31
0128       29.75
0129     -483.14
0135     2908.83
0189    10045.90
0251     5700.10

La deuxième colonne est les soldes.

Mon code, avec la classe supplémentaire pour stocker les comptes avec soldes est le suivant

package Bank;

import java.util.Scanner;
import java.io.PrintStream;
import ui.UIAuxiliaryMethods;

class Bank {

    PrintStream out;

     Bank() { 
            out = new PrintStream(System.out); 
            }

     void readFileIn() {
         Scanner fileScanner = UIAuxiliaryMethods.askUserForInput().getScanner();
         while(fileScanner.hasNext()) {
             String Account = fileScanner.nextLine();
             readLine(Account);
         }
     }

     void readLine(String Account) {
         String[] part1 = Account.split(" ");
         String account = part1[0];
         String balance1 = part1[1];
         Scanner Balance = new Scanner(balance1);
         double balance = 0;
         double count1 = 0;
         while(Balance.hasNext()) {
             balance += Balance.nextDouble();
             count1++;
         }
             Accounts line = new Accounts(account, balance);
             out.printf("%s %.2f \n",line.account, line.balance);
         }

     void start() {
            readFileIn();
        }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Bank().start();
    }

}

package Bank;

class Accounts {

    String account;
    double balance;

    Accounts(String account, double balance){

        this.account = account;
        this.balance = balance;
    }

}

Le résultat que j'obtiens est le suivant:

0015 0,00 
0020 0,00 
0034 0,00 
0069 0,00 
0085 0,00 
0091 0,00 
0128 0,00 
0129 0,00 
0135 0,00 
0189 0,00

Existe-t-il un moyen de résoudre ce problème afin d'obtenir les soldes réels?

0
Atal Atmar 4 nov. 2019 à 12:43

3 réponses

Vous avez plusieurs espaces entre les valeurs. Par exemple, "0015 112.34".split(" ") devient {"0015","","","","","","","112.34"} et lorsque vous utilisez l'index 1, vous obtenez uniquement une chaîne vide. Vous devez diviser la ligne par toute la séquence d'espaces, comme account.split("\\s+") (en utilisant une expression régulière).

Notez également que vous n'avez pas besoin d'un scanner pour trouver la valeur double. Vous pouvez simplement utiliser Double.valueOf(balanceAsString). Et rappelez-vous que par convention, tous les noms de variables doivent commencer par une lettre minuscule.

0
radulfr 4 nov. 2019 à 09:55

Au lieu d'utiliser un Scanner supplémentaire, vous pouvez simplement utiliser Double.parseDouble() pour obtenir la valeur de la deuxième colonne, c'est-à-dire

void readLine(String Account) {
    String[] part1 = Account.split(" ");
    String account = part1[0];
    double balance = Double.parseDouble(part1[1]);
    Accounts line = new Accounts(account, balance);

    ...
}

Si les colonnes ne sont pas divisées par un seul espace, il est également préférable d'utiliser un séparateur plus général comme split("\\s+") qui acceptera plusieurs espaces et tabulations.

1
Turamarth 4 nov. 2019 à 09:54

Utilisez split(" +") ou mieux split("\\s+") pour diviser les espaces (tab aussi), plusieurs fois, au moins une. De même, hasNextLine/hasNextDouble est meilleur que hasNext.

En réalité:

     String[] part1 = Account.split("\\s+");
     String account = part1[0];
     String balance1 = part1[1];
     double balance = Double.parseDouble(balance1);
0
Joop Eggen 4 nov. 2019 à 11:18