从文本文件创建二维数组

时间:2016-12-10 18:18:13

标签: java arrays string numbers

在这个(我的第一个)学期结束时,我的程序的某个部分遇到了问题。所以我必须拿一个文本文件,其中包括名字和一些数字,并用每个人的数字做一些计算。我试图用循环创建一个二维数组,并将数字(保存为字符串)转换为双精度数。问题在于我无法使用j = 3j = 4的值进行计算,因为这是作业的另一半。

所以我需要一种方法来将j = 0和1的值存储为字符串,将j = 2,3和4的值存储为双精度 - 如果可能,最好在同一个数组中。

我的教授(他没有教过很多东西)说了一些关于使用多种方法的事情。如果你看一下以下几行:

double empPay = empHoursResult * empRateResult;

System.out.println(arr[3] * arr[4]);

这些都不起作用,因为我需要初始化双精度(使它们= 0)并且arr[j]的值存储为字符串。

如何将j > 1的值仅存储为双精度数,并将j = 0,1存储为字符串?任何建议表示赞赏。感谢。

public static void main(String[] args) {

    String[] textLine = new String[10];
    int i = 0;
    String empNumber;
    String empHours;
    String empRate;
    double empNumberResult;
    double empHoursResult;
    double empRateResult;

    System.out.println("Reading File ......");

    String fileName = "datatext.txt";

    try {

        //Create object of FileReader
        FileReader inputFile = new FileReader(fileName);

        //Instantiate the BufferedReader Class
        BufferedReader bufferReader = new BufferedReader(inputFile);

        String line;

        while ((line = bufferReader.readLine()) != null) {
            textLine[i] = line;
            i++;
        }

        for (int x = 0; x < i; x++) { //For loop of the rows, each employee.

            String empInfo = textLine[x];

            String[] arr = empInfo.split(" ");
            System.out.println("\nEmployee: " + (x + 1));

            for (int j = 0; j < arr.length; j++) { 

                if (j == 0) {
                    System.out.println("Last Name: " + arr[j]); 

                } else if (j == 1) {
                    System.out.println("First Name: " + arr[j]);
                } else if (j == 2) {
                    empNumber = arr[j]; 
                    empNumberResult = Double.parseDouble(empNumber); 
                    System.out.println("Employee Number: " + empNumberResult); 
                } else if (j == 3) {
                    empHours = arr[j]; 
                    empHoursResult = Double.parseDouble(empHours); 
                    System.out.println("Total Hours Worked: " + empHoursResult);
                } else if (j == 4) {
                    empRate = arr[j]; 
                    empRateResult = Double.parseDouble(empRate); 
                    System.out.println("Employee Hourly Rate: " + empRateResult); // Read above line ^^.
                }
            }
            double empPay = empHoursResult * empRateResult;
            System.out.println(arr[3] * arr[4]);
            /*
             * Here is where I want the system to print out calculations from below.
             * The calculatePay method must be somewhere in the first 'for loop' because I need it
             * to calculate pay for all employess, x.
             */
        }

        bufferReader.close();
    } catch (Exception e) {
        System.out.println("Error while reading file line by line:" + e.getMessage());
    }
}

public static void calculatePay(double empHoursResult, double empRateResult) {

    double empNormalPay;
    double empOvertimePay;
    double empOvertimeHours;
    double empTotalPay;

    if (empHoursResult > 40) {
        empNormalPay = 40 * empRateResult;
        empOvertimeHours = 40 - empHoursResult;
        empOvertimePay = empOvertimeHours * 1.5;
        empTotalPay = empNormalPay = empOvertimePay;
    }
}

3 个答案:

答案 0 :(得分:1)

你的代码似乎与所有for循环相当多余 我已经在下面添加了一些伪代码,您应该能够重新编写程序,因为我不应该解决您的任务。

while(line = readline){
    String[] data = line.split(" ");

    String a = data[0];
    String b = data[1];
    double c = Double.parseDouble(data[2]);
    double d = Double.parseDoubledata([3]);
    double e = Double.parseDoubledata([4]);
}  

这是否清楚了,或者我没有看到你被困在哪里?

修改
看到travis帖我明白你的问题可能在于存储在一个数组中。这确实是不可能的,使用两个阵列应该可以解决你的问题。

答案 1 :(得分:0)

排除对象多态(这里不适用),您不能在同一个数组中存储两种不同的数据类型。 根据定义,数组只包含一种数据类型。因此,您需要创建两个不同的数组(一个用于您的字符串,一个用于您的双打)或创建一个&#34; EmployeeInfo&#34;包含字符串和双精度字段的类 - 然后从该类中创建一个数组。

答案 2 :(得分:0)

假设使用基元数组并不是您的分配的明确要求,您应该创建一个EmployeeWorkRecord对象,它将每组项目封装在一个记录(姓氏,名字,员工ID,小时,费率)中并使用用于存储它们的集合(如ArrayList)。然后,您可以向EmployeeWorkRecord添加“calculatePay()”方法。

原始数组只能存储一种类型的对象,因此使用 only 原始数组执行此操作的唯一方法是创建五个并行数组,每个数据项一个。我想不出你为什么要那样做的好理由。