2016-12-10 51 views
2

我在這個(我的第一個)學期結束時遇到了我的程序的特定部分問題。所以我必須帶一個文本文件,其中包括姓名和一些數字,並對每個人的數字進行一些計算。我試圖用循環創建一個2維數組,並將數字(保存爲字符串)轉換爲雙精度數組。問題在於,我不能將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; 
    } 
} 
+1

您確定要將字符串和雙打存儲在同一個數組中嗎?也許你應該爲每個員工創建一個對象並將這些對象存儲在一個數組中。順便說一句。你的內循環是不需要的。只要執行'empNumber = arr [2];'等 – SpiderPig

回答

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]); 
} 

這是否清楚事情還是我沒有看到你被困在哪裏?

編輯
看到特拉維斯後我明白你的問題可能是雙方在一個陣列中存儲。這確實是不可能的,使用兩個陣列應該可以解決您的難題。

0

剔除對象多態性(不適用於此),你不能在兩個不同的數據類型存儲在同一陣列英寸根據定義,數組只包含一種數據類型。所以你要麼需要創建兩個不同的數組(一個用於你的字符串,一個用於你的雙精度),或者創建一個包含字段和雙精度字段的「EmployeeInfo」類,然後從該類中創建一個單獨的數組。

+0

您可以將'String'和'Double'值存儲在'Object'數組中,但我懷疑他應該這樣做。 – SpiderPig

+0

由於他將值2-4保存在其他變量中,我不認爲這實際上是問題的一部分。 – turoni

0

假設使用基元數組不是明確要求您的分配,您應該創建一個EmployeeWorkRecord對象,而不是將每組項目封裝在一條記錄中(姓,名,僱員ID,小時,費率)和使用一個集合(如ArrayList)來存儲它們。然後你可以在你的EmployeeWorkRecord中添加一個「calculatePay()」方法。

原始數組只能存儲一種類型的對象,所以只能使用原始數組的這樣做的唯一方法是創建五個並行數組,每個數據項一個。我想不出有什麼好的理由你爲什麼想這樣做。