2014-11-15 78 views
0

嗨即時製作這個程序,創建員工和保存他們的信息。我在一個類中做出這種方法來存儲一些它接收到的信息,但問題是,它會覆蓋被傳遞的信息,這是方法`在多維替換信息

int employeeSize = 1; 

public void employeeInfo(int ID , double hours, int salary){ 
    double [][] empInfo = new double[employeeList.size()][3]; 
     for(int row = 0; row < empInfo.length; row++){ 
      empInfo[ID-1][0] = ID; 

     } 
     for(int row = 0; row < empInfo.length; row++){ 
       empInfo[ID-1][1] = hours; 

     } 
     for(int row = 0; row < empInfo.length; row++){ 
       empInfo[ID-1][2] = Double.parseDouble(f.format(getPay(hours, salary))); 

     } 
     //if(employeeSize == employeeList.size()){ 
      printInfo(empInfo); 
      totalPay(empInfo); 
      totalHours(empInfo); 
     //} 
      employeeSize++; 
    }` 

這是它被如何使用的其他班級,它會根據有多少員工被添加,並且其他信息通過,要求員工花費很多時間。

for(int i = 0; i <employeesToAdd; i++){ 
    double hours = getADouble(scanner, "\nEnter the hours for "+employees.names(i)+": > "); 
    employees.employeeInfo(employees.id(i), hours,employees.getSalary(i)); 
} 

這是它被打印的結果。

Enter the hours for j: > 42 
1.0 42.0 1757.21 0.0 0.0 0.0 
This is the total pay: 1757 
This is the total hour: 42.0 
Enter the hours for d: > 41 
0.0 0.0 0.0 2.0 41.0 1296.88 
This is the total pay: 1296 
This is the total hour: 41.0 

我想也格式化打印出來是

Enter the hours for j: > 42 
Enter the hours for d: > 41 

1.0 42.0 1757.21 
2.0 41.0 1296.88 
This is the total pay: 3054 
This is the total hour: 83.0 

這是打印陣列

public void printInfo(double[][]array){ 
    for(int i = 0; i < array.length; i++){ 
     for(int j = 0; j < array[i].length; j++){ 
      System.out.print("\t"+array[i][j]); 
     } 
    } 
} 
+0

你的意思是被覆蓋的信息是什麼意思?也許讓他們不可變? – lenhuy2106

回答

0

有一些事情,也許可以幫助方法你在這裏;但我會一次回顧你的問題。

你說你的一些參數數據在你的方法中被覆蓋;這通常是因爲在Java中,所有對象參數都通過參考而不是。這意味着,在引擎蓋下,傳遞一個對象作爲參數實際上只是將一個指針傳遞給該對象的內存中的位置,並且在該方法的內部和外部,所有操作都在同一個對象上。爲了解決這個問題,你通常需要做一些叫做的深層複製,或者將對象的結構和內容複製到一個新的項目中。我可以給你的其他好建議,雖然我沒有看到問題出在哪裏(這裏是11:18 PM),但是爲了避免使用靜態和全局範圍變量來處理類似的任務,因爲它們傾向於傾向於這樣的問題。最好調整/重構你的方法,以便簡單地返回必須被創建的條目,最好在一個集合而不是一個數組中。

我建議的第二項是用於輸出格式。您可能會考慮用於這種情況的是Java Streaming API。一個流迭代它包含的每個項目,對其執行一系列定義的操作,並以終端方法結束。他們是新到Java 8.你在做什麼,你可能會做這樣的事情:

Arrays.stream(array).forEach(a -> Arrays.stream(a).forEach(a2 -> System.out.print("\t" + item)) 

這樣就可以有效的定位和排序,所有的條目下都記錄在API中「流」 。對於列表和集合(我推薦通過數組在任何情況下),您可以調用Collection.stream()來代替它們全部實現的。至於他們的訂購,這是訂購你的電話的問題。

我希望我能幫上忙。當我明天有空時,我會盡力回覆。