【问题标题】:Sort a two-dimensional array of teachers对教师的二维数组进行排序
【发布时间】:2014-03-31 15:46:18
【问题描述】:

我需要用一个方法编写一个程序,该方法接收一个二维 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] 处的薪水。

【问题讨论】:

  • 那么...你尝试了什么?
  • 真正的问题是什么?如何对数组进行排序?
  • 为什么这是一个二维数组?使其成为一维并正常排序。
  • 对不起,我不知道为什么我解释我所尝试的部分没有发布。 @AnubianNoob 我们正在练习二维数组,所以我不能使用一维数组。
  • 你应该如何对二维数组进行排序?你能解释一下吗?

标签: java arrays sorting multidimensional-array


【解决方案1】:

好的,这是冒泡排序:

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

好的,试试吧,我没有测试代码,所以我希望我没有忘记什么

编辑:交换改进

EDIT2:将变量初始化移到 while 循环中

【讨论】:

  • 到目前为止,它似乎正在工作。现在我只需要打印数组。非常感谢。
  • 哦,实际上我已经尝试了好几次,显然它永远不会停止循环。我会检查一下是否可以更改任何内容并通知您。
  • 你是对的,问题是,我忘了重新初始化while循环中的变量,它现在应该可以工作了
  • 是的,我想通了,但忘记发回了。非常感谢您的帮助。
猜你喜欢
  • 2013-08-17
  • 2015-09-17
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多