交换二维数组元素

时间:2014-04-09 14:47:42

标签: java arrays sorting multidimensional-array

这是我的FCFS算法。

我有一个名为atst的二维数组,意思是arrival time, service time

数组大小为5*5

我的数组的逻辑图片如下: enter image description here

第一栏:流程名称

第二栏:到达时间

第三栏:服务时间(突发时间)

第四列和第五列将按照到达时间(第二列)排序等待时间和排序后的总时间。

我的问题是按升序对第二列(到达时间)排序数组。

我的代码:

    // Sort array by arrival times
    int[] temp = new int[3];
    for (int i = 0; i < atst.length; i++) {
        if (atst[i][1] > atst[i + 1][1]) {     // Then swap!
            temp[i] = atst[i][1];
            atst[i][1] = atst[i + 1][1];
            atst[i + 1][1] = temp[i];
        }
    }

我使用temp[3]因为在排序之前其他列(第四和第五列)是空的(零)。

但是此代码在此行中生成arrayOutOfBoundExceptiontemp[i] = atst[i][1];

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你走了:

 // Sort array by arrival times
int[] temp = new int[atst.length]; //to avoid any out of bound.
for (int i = 0; i < atst.length-1; i++) { //-1 will solve
    if (atst[i][1] > atst[i + 1][1]) {     // Then swap!
        temp[i] = atst[i][1];
        atst[i][1] = atst[i + 1][1];
        atst[i + 1][1] = temp[i];
    }
}

希望这会奏效。你已经超过了atst[i+1]中绑定的最后一个i值的数组。这个-1将解决您arrayOutOfBoundException的问题。

编辑:试试这个:

 // Sort array by arrival times
int[] temp = new int[atst.length]; //to avoid any out of bound.
for (int i = 0; i < atst.length-1; i++) { //-1 will solve
    for (int j = 0; i < 2; j++) {
        if (atst[i][j] > atst[i + 1][j]) {     // Then swap!
           temp[i] = atst[i][j];
           atst[i][j] = atst[i + 1][j];
           atst[i + 1][j] = temp[i];
        }
    }
}

答案 1 :(得分:1)

您的设计在几个方面被打破。

首先,你根本不应该使用二维数组。由于列具有不同的含义,因此包含命名字段的对象数组将为您节省大量工作。

其次,你所展示的并不接近排序算法。即使在修复编码问题之后,对数组进行单次传递也不足以对其进行排序。看看Arrays.sort()

第三,即使粗略检查,您的代码也必须。变量i0迭代到atst.length - 1。但你已经分配temp只有3个职位。除非atst.length确定不超过3,否则您将在temp的末尾以范围错误运行。

第四,您要对行进行排序。您尝试编写的代码将仅交换每行的第二列。阵列的其余部分将保持原样。我认为这不是你想要的。

退后一步。认为。扔掉这个代码。再试一次。