【发布时间】:2015-11-30 01:11:22
【问题描述】:
我正在尝试创建一个方法,该方法将采用随机填充的 2D 数组(每一行是一个工人,每一列是他们在夏天工作的一年。数组中的每个元素都是他们那个夏天赚了多少钱) 并按每年夏天工作总收入最高的工人进行排序,然后从最高到最低排序。这是课程:
import java.util.Scanner;
public class SummerStats
{
int[][] salaries;
SummerStats(int people, int years)
{
int i;
int j;
salaries = new int[years][people];
for (i = 0; i < salaries.length; i++) // initialize salaries[][] with random salaries
{
for (j = 0; j < salaries[i].length; j++)
{
salaries[i][j] = (int)(Math.random() * 1001);
}
}
}
// I have omitted a few methods here that are not relevant to this question
// method returns sorted array by earnings of a person over all years
public int[][] sortedEarnings()
{
int i = 0;
int j = 0;
int[][] sorted = new int[salaries.length][salaries[i].length];
int rowSum = 0;
int row[][] = new int[2][salaries.length];
boolean flag = true;
int temp = 0;
// sorted will be a copy of salaries, then be sorted by total of each row
for (i = 0; i < salaries.length; i++)
{
for (j = 0; j < salaries[i].length; j++)
{
sorted[i][j] = salaries[i][j];
}
}
// sum rows
for (i = 0; i < sorted.length; i++)
{
for (j = 0; j < sorted[i].length; j++)
{
rowSum = rowSum + sorted[i][j];
}
row[1][i] = rowSum;
rowSum = 0;
}
// set worker index
i = 0;
for (j = 0; j < row[i].length; j++)
{
row[i][j] = (j + 1);
}
// sort by total earned for each worker
i = 1;
while (flag)
{
flag = false;
for (j = 0; j < row[i].length - 1; j++)
{
if (row[i][j] < row[i][j + 1]) // if total amount is less than next position then swap
{
temp = row[i - 1][j]; // only need to sort the indeces, not the actual sums
row[i - 1][j] = row[i - 1][j + 1];
row[i - 1][j + 1] = temp;
flag = true;
}
}
}
return row;
}
}
现在的想法是,你创建一个与随机生成的数组相同的数组,然后创建 rowSum,它只找到每个工人总工资的总和,创建工人编号的索引,然后按工资总和进行排序并换出工人编号相应。出于某种原因,我的冒泡排序不起作用,我尝试使用两个 for 循环以及这个 while 循环 想法(目前会导致无休止的循环,所以要小心)。
如果有人能发现这种排序有什么问题或提供更好的排序方法,那就太好了!
【问题讨论】:
标签: java arrays sorting 2d bubble-sort