读取双精度值返回零而不是实际值

我正在尝试读取包含帐号和余额的文本文件。我以字符串形式读取帐号,以双精度形式读取余额,但我得到的余额全为零,而不是实际值。


该文件如下所示:


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

第二列是余额。


我的代码,带有额外的类来存储带有余额的帐户,如下所示


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;

    }


}

我得到的结果如下:


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

有什么办法可以解决这个问题,以便我获得实际余额吗?


偶然的你
浏览 39回答 3
3回答

森栏

Scanner您可以简单地使用Double.parseDouble()来获取第二列的值,而不是使用附加值,即void readLine(String Account) {    String[] part1 = Account.split(" ");    String account = part1[0];    double balance = Double.parseDouble(part1[1]);    Accounts line = new Accounts(account, balance);    ...}如果列不是由单个空格分隔的,那么最好使用更通用的分隔符,例如split("\\s+")可接受多个空格和制表符。

慕码人8056858

值之间有多个空格。例如"0015      112.34".split(" "),{"0015","","","","","","","112.34"}当您使用索引 1 时,您只会得到一个空字符串。您应该按整个空格序列分割该行,例如account.split("\\s+")(使用正则表达式)。另请注意,您不需要扫描仪来查找双精度值。你可以只使用Double.valueOf(balanceAsString). 请记住,按照惯例,所有变量名称都应以小写字母开头。

慕尼黑5688855

使用split(" +")或 更好地split("\\s+")在空白处(也包括制表符)进行多次分割,至少一次。也hasNextLine/hasNextDouble比hasNext.实际上:     String[] part1 = Account.split("\\s+");     String account = part1[0];     String balance1 = part1[1];     double balance = Double.parseDouble(balance1);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java