2014-03-31 52 views
0

我需要使用一個方法來接收一個二維3 * 3數組,並且有幾個教授的信息(在一個名爲「Profesor」的類中創建),這些信息包括他們的ID ,名字,姓氏,年齡,性別,工作小時數和每小時贏得多少,按照建造者設定的特定順序),並按照他們的年齡和日薪分兩種單獨的方法進行分類。他們的信息是通過構造函數提供的。此外,他們的日薪是用Salary()方法(在「Profesor」類中)計算的,該方法返回小時數乘以他們每小時的金額。 這裏是我到目前爲止的代碼: 對教師的二維數組進行排序

public class Main { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 
    Scanner in = new Scanner(System.in); 

    Profesor arreglo[][]; 
    arreglo = new Profesor[3][3]; 

    Profesor profe1 = new Profesor(126509404, "Edgar", "Hernandez", 28, "M", 8, 0); 
    profe1.setMoneyPerHour(1.66); 
    Profesor profe2 = new Profesor(233849920, "Nuria", "Ramírez", 52, "F", 4, 0); 
    profe2.setMoneyPerHour(2.43); 
    Profesor profe3 = new Profesor(126509404, "José", "Hernandez", 29, "M", 8, 0); 
    profe3.setMoneyPerHour(1.84); 
    Profesor profe4 = new Profesor(126509404, "Arlene", "Hernandez", 34, "F", 6, 0); 
    profe4.setMoneyPerHour(2.00); 
    Profesor profe5 = new Profesor(126509404, "Orlando", "Hernandez", 36, "M", 10, 0); 
    profe5.setMoneyPerHour(1.66); 
    Profesor profe6 = new Profesor(126509404, "Ximena", "Hernandez", 55, "F", 4, 0); 
    profe6.setMoneyPerHour(2.30); 
    Profesor profe7 = new Profesor(126509404, "Eduardo", "Hernandez", 44, "M", 8, 0); 
    profe7.setMoneyPerHour(1.66); 
    Profesor profe8 = new Profesor(126509404, "Johanna", "Hernandez", 35, "F", 8, 0); 
    profe8.setMoneyPerHour(1.66); 
    Profesor profe9 = new Profesor(126509404, "Gilberto", "Hernandez", 42, "M", 8, 0); 
    profe9.setMoneyPerHour(1.66); 


    arreglo[0][0] = profe1; 
    arreglo[0][1] = profe2; 
    arreglo[0][2] = profe3; 

    arreglo[1][0] = profe4; 
    arreglo[1][1] = profe5; 
    arreglo[1][2] = profe6; 

    arreglo[2][0] = profe7; 
    arreglo[2][1] = profe8; 
    arreglo[2][2] = profe9; 

的方法來計算工資如下:

public double salary(){ 
    double salary = hours*moneyPerHour; 
    return salary; 
} 

這是我到目前爲止已經試過給數組排序,根據我們已經在課堂上教過:

public static void ordenaProfes(Profesor matrix[][]) { 
    int ix = 0; 
    int jx = 0; 
    double minorSalary= matriz[0][0].salary(); 
    int n = matrix.length; 
    for(int i = 0; i < n; i++){ 
     for(int j = 0; j < n; j++){ 
      double aux= matrix[i][i].salary(); 
      if(aux < minorSalary){ 
       ix = i; 
       jx = j; 
       minorSalary = aux; 
      } 
     } 
    } 

但是使用它不起作用。它不排序數組,只返回arreglo [0] [0]的薪水。

+0

所以...你試過了什麼? – Gladhus

+1

實際的問題是什麼?如何排序數組? – csmckelvey

+0

爲什麼這是一個二維數組?使其成爲一個維度並正常排序。 –

回答

2

好吧,這裏是冒泡排序:

public static void ordenaProfes(Profesor matrix[][]) { 
    int n = matrix.length; 
    boolean changed = true; //need to check, if something have changed 
    while(changed){ 
     changed = false; //set changed to false at the begining 
     int ix = 0; 
     int jx = 0; 
     double lastSalary= matrix[0][0].salary(); // 
     for(int i = 0; i < n; i++){ 
      for(int j = 0; j < n; j++){ 
       double aux= matrix[i][j].salary(); 
       if(aux < lastSalary){ 
        changed = true; //set change to true, so you know, that you have to iterate 1 more timr 
        //swap the element 
        Professor temp = matrix[ix][jx]; 
        matrix[ix][jx] = matrix[i][j]; 
        matrix[i][j] = temp; 
       } 
       //save the last element 
       ix = i; 
       jx = j; 
       lastSalary = aux; 
      } 
     } 
    } 

好吧,試試吧,我沒有測試的代碼,所以我希望我沒有忘記什麼

編輯:交換提高

編輯2:移動變量初始化到while循環

+0

到目前爲止,它似乎工作。現在我只需要打印數組。非常感謝你。 –

+0

哦,實際上現在我已經嘗試過好幾次了,顯然它永不停止循環。我會檢查並看看我能否改變任何事情並讓你知道。 –

+1

你是對的,問題是,我忘了重新初始化while循環中的變量,它現在應該工作 – JohnnyAW