2015-02-08 58 views
-1
public class AccountRecord { 
    public static final int MAXEMPLOYEES = 2; 
    public static void main(String[] args) { 
    String[] strTemp = new String[MAXEMPLOYEES]; 
    Double[] hourTemp = new Double[MAXEMPLOYEES]; 
    Double[] rateTemp = new Double[MAXEMPLOYEES]; 
    EmployeeData[] employeeRec = new EmployeeData[MAXEMPLOYEES]; 
    EmployeeFile getEmployee = new EmployeeFile(); 
    int count; 

    getEmployee.openFile(); 
    getEmployee.readFile(); 
    getEmployee.closeFile(); 

    for(count = 0; count < MAXEMPLOYEES; count++) { 
     employeeRec[count] = new EmployeeData(); 

     strTemp[count] = getEmployee.getFullName(count); 
     hourTemp[count] = getEmployee.getHours(count); 
     rateTemp[count] = getEmployee.getRate(count); 

     employeeRec[count].setName(strTemp[count]); 
     employeeRec[count].setHours(hourTemp[count]); 
     employeeRec[count].setRate(rateTemp[count]); 
     employeeRec[count].setGross(); 
     employeeRec[count].setTax(); 
     employeeRec[count].setNet(); 
    } 

以上是我的主要文件的一部分。通過多種方法的java數組


所以我想要的是持有一個帳戶的數組,並在該帳戶內持有僱員的全名,小時和payrate。我從中讀取並輸入文件,並將這些輸入存儲到全名字符串數組中,以及數小時和薪水的雙精度數組。

我得到的問題是在我的「EmployeeData工作」目標文件:

當我嘗試設置全名,小時,payrate並打印出這些價值觀,我得到一個空值。

P.S.這是我第一次在stackoverflow上,我第一次請求幫助代碼。如果這是非常糟糕的格式,我很抱歉,如果您需要我,我會立即爲您解決問題。我目前正在自學Java,所以我還沒有完全掌握這門語言。謝謝。

編輯:@racraman我已經設法解決了我以前的問題,現在只是一個關於效率的快速答案。正如你在上面的代碼中看到的,我將'getEmployee'的值存儲到我的臨時數組(strTemp,hourTemp,rateTemp)中以保存它們,然後將這些值存儲到'employeeRec [count]'中。有一個更好的方式去了解什麼,我想在這裏做任何想法

+0

您是否嘗試過使用調試器找到發生什麼事情? – Jens 2015-02-08 08:07:23

+0

代碼中存在高度可疑的'* /'。另外,你永遠不會改變'記錄'。編輯此項,確保您的代碼正確 – laune 2015-02-08 08:19:53

回答

0

幾個問題:?

  • 首先,我注意到一個最終意見「* /」你後第一個for循環(與 System.out.println(「輸入名和姓:」);)。我認爲這個循環應該註釋掉 - 是嗎?

  • 其次 - 聽起來很小,但最好早點用標準來獲取 - 在Java中,類名稱是「camel-case」 - 即。每個單詞的開頭都是大寫 - 所以「EmployeeData」而不是「employeedata」。同上變量名稱,除了它們有小寫字母 - 例如「firstName」

實際的問題是,您有EmployeeData「做」太多 - 它既是文件,也是每個員工的值。所以,當你這樣做時: r.openFile(); r.readFile(); r.closeFile();

您正在將文件讀入變量「r」。但是,這些值對於「employee [record]」變量不可用,因爲它們是與「r」無關的不同對象。

什麼,你應該做的是分裂EmployeeData工作分爲兩大類: - 類EmployeeFile封裝所有的文件處理,並 - 類員工持有的屬性爲每個員工

+0

是的。第一個循環應該被註釋掉,因爲我一開始就是從鍵盤輸入的,但是想要嘗試文件輸入。因此,如果我使用2個類,我是否需要公開聲明我的變量,以便兩個類都可以訪問對方? – byu2899 2015-02-08 22:09:32

+0

你會有幾個選擇。我不喜歡公共變量 - 這暴露了班級的「機制」。相反,想想這個類是什麼 - 這是調用者使用這個類的原因。然後揭露該行爲爲公共方法(一種很好的做法是有一個明確的「公共接口」 - 谷歌「節目,以一個接口」),保持變量和它是如何做它作爲私人資料。例如,您可以擁有「Employee getEmployee(int recNum)」,或者可以爲每個字段分別設置不同的獲取者 - 無論這種情況是否合理。 – racraman 2015-02-08 23:51:06