Java - 无法从导入文件更改数据类型

时间:2017-11-07 13:17:32

标签: java arraylist

我正在尝试将导入文件String数据类型转换为Double并进行计算,但发现了一些错误。做出假设时有任何错误吗?

import java.io.*;
import java.util.*;
import java.lang.*;

public class Q4
{
    public static void main (String [] args) throws IOException, NumberFormatException
    {
        File file = new File("SalesData.txt");
        Scanner inputFile = new Scanner (file);

        while (inputFile.hasNext())
        {
            String weekly_Sale = inputFile.nextLine();
            String sale = weekly_Sale;
            String list = sale;
            Double value = Double.parseDouble(list);
            Double[]data = value.split(",");
            System.out.println(data);
        }
        inputFile.close();
    }
}

文件SalesData.txt包含零售店每天销售的美元销售额数周。文件中的每一行包含七个数字,即一周的每日销售额。数字用逗号分隔。以下是文件中的示例:

2541.36,2965.88,1965.32,1845.23,7021.11,9652.74,1469.36

编写一个打开文件并处理其内容的程序。该程序应显示以下内容:

•每周的总销售额 •每周的平均每日销售额 •所有周的总销售额 •平均每周销售额 •销售额最高的周数 •销售额最低的周数

3 个答案:

答案 0 :(得分:2)

需要指出的各种事项:

  • 正如我之前评论的那样,Double没有分割方法,你不能直接解析为2541.36,2965.88,1965.32...

  • 之类的字符串加倍
  • 最好使用BufferedReader而不是Scanner来读取文件,因为它是 a bit faster

  • 您可以使用try-with-resources语句自动关闭io资源。
  • 您的代码可以缩短为:

    try (BufferedReader br = new BufferedReader(new FileReader("SalesData.txt"))){
    
        String currentLine;
    
        // read each line until the end of the file
        while ((currentLine = br.readLine()) != null){
            // split each token to a double-parseable string value, then parse it to a double and finally 
            // collect those values into an array of doubles
            double[] data = Arrays.stream(currentLine.split(",")).mapToDouble(Double::parseDouble).toArray();
            System.out.println(Arrays.toString(data));
        }
    } catch (java.io.IOException e) {
        e.printStackTrace();
    }
    

为此,我正在使用Java 8 Stream API

答案 1 :(得分:1)

    Double value = Double.parseDouble(list);
    Double[]data = value.split(",");

您的操作顺序不正确。首先,您需要将行拆分为单独的字符串值,然后将它们解析为double。

尝试这样的事情

    String[] data = value.split(",");
    for (String item : data) {
         Double result = Double.parseDouble(item)
         // Do Stuff

    }

答案 2 :(得分:0)

试试这个

mtcars_filtered()[, c(input$results_columns_selected)]