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?
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.
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.
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);