在这个(我的第一个)学期结束时,我的程序的某个部分遇到了问题。所以我必须拿一个文本文件,其中包括名字和一些数字,并用每个人的数字做一些计算。我试图用循环创建一个二维数组,并将数字(保存为字符串)转换为双精度数。问题在于我无法使用j = 3
和j = 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;
}
}
答案 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 原始数组执行此操作的唯一方法是创建五个并行数组,每个数据项一个。我想不出你为什么要那样做的好理由。