我正在尝试设置一个方法,它将按列排序一个二维的双倍数组。根据所提供的规范,该方法也不应采用长度不等的行的粗糙数组。我正在使用双mdarray = {{3.0,4.0,1.0,8.0},{13.0,2.0,12.0,9.0}来测试这一点。
使用打印方法,应该将其显示为
3.0,2.0,1.0,8.0,
13.0,4.0,12.0,9.0,
当使用单独的打印方法输出结果时,数组似乎没有变化。我认为我的问题是,在进入下一列之前,如何检查给定列的每一行,但如果没有Arrays.sort()方法,我不知道如何轻松完成,这在本练习中是不允许的。
public void sort(boolean byColumn)
{
if(isRagged() == true)
{
System.out.println("Ragged arrays cannot be sorted by column.");
}
else
{
for(int i = 0; i < mdarray.length; i++)
{
for(int j = i + 1; j < mdarray.length - 1; j ++)
{
for(int k = 0; k < mdarray[i].length; k++)
{
if(mdarray[i][k] > mdarray[j][k])
{
double temp = mdarray[i][k];
mdarray[i][k] = mdarray[j][k];
mdarray[i][k] = temp;
}
}
}
}
}
}发布于 2016-12-08 08:22:22
实际上,您还切换了i和j变量的界限。由于j是从i+1迭代而来的,因此它应该获得到mdarray.length - 1的值,因此条件应该是j < mdarray.length,而i的上界应该是mdarray.length - 2,因此条件应该是i < mdarray.length - 1。
还有我们在注释中提到的错误--当切换元素时,将temp变量赋值给mdarray[j][k]。
发布于 2016-12-08 08:47:36
如您所知,您可以将2D数组视为一组列或行。这个程序必须对列进行排序,因此我们将把数组看作一组列。
该方案已完成:
如果您打印mdarray的每一行,则输出如下:
mdarray[0]: 3.0 2.0 1.0 8.0
mdarray[1]: 13.0 4.0 12.0 9.0 https://stackoverflow.com/questions/41034025
复制相似问题