![](/img/trans.png)
[英]Sorting A Two-Dimensional (2D) Array as a whole without Row/Column Order
[英]Sorting Two-Dimensional Array by Row
要求是對二維數組的行進行排序。 我覺得我的代碼非常接近完成,但我無法弄清楚為什么它沒有顯示已排序的數組。 我忘了提到我們不允許使用預制的排序方法。 問題很可能出在sortRows方法中。 無論如何,這是我的代碼:
public class RowSorting
{
public static void main(String[] args)
{
double[][] numbers = new double[3][3];
double[][] number = new double[3][3];
int run = 0;
String answer = "";
while (run == 0)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter a 3-by-3 matrix row by row: ");
for(int row = 0; row < numbers.length; row++)
{
for(int column = 0; column < numbers[row].length; column++)
{
numbers[row][column] = input.nextDouble();
}
}
for(int row = 0; row < numbers.length; row++)
{
for(int column = 0; column < numbers[row].length; column++)
{
System.out.print(numbers[row][column] + " ");
}
System.out.print("\n");
}
System.out.println("The sorted array is: \n");
number = sortRows(numbers);
for(int row = 0; row < number.length; row++)
{
for(int column = 0; column < number[row].length; column++)
{
System.out.print(number[row][column] + " ");
}
System.out.print("\n");
}
System.out.print("\nWould you like to continue the program (y for yes or anything else exits): ");
answer = input.next();
if(answer.equals("y"))
{
continue;
}
else
break;
}
}
public static double[][] sortRows(double[][] m)
{
for(int j = 0; j < m[j].length - 1; j++)
{
for(int i = 0; i < m.length; i++)
{
double currentMin = m[j][i];
int currentMinIndex = i;
for(int k = i + 1; k < m[j].length; k++)
{
if(currentMin > m[j][i])
{
currentMin = m[j][i];
currentMinIndex = k;
}
}
if(currentMinIndex != i)
{
m[currentMinIndex][j] = m[j][i];
m[j][i] = currentMin;
}
}
}
return m;
}
}
它看起來像這個塊:
if(currentMin > m[j][i])
{
currentMin = m[j][i];
currentMinIndex = k;
}
永遠不會發生。 因為你剛才將currentMin分配給m [j] [i]前面的兩行。 如果檢查,我相信你想用k。 就像是
if (currentMin > m[j][k]){
currentMin = m[j][k];
currentMinIndex = k;
}
正如ergonaut所引用的,您遇到了代碼塊問題
if(currentMin > m[j][i]) ...
並且
m[currentMinIndex][j] = m[j][i];
但是,你的for循環也有問題。
for(int j = 0; j < m[j].length - 1; j++) ...
for(int i = 0; i < m.length; i++) ...
這兩者都是奇怪的結構。 您可能希望交換這些for循環,以便不拋出索引異常。 這也會導致您在代碼中處理索引。 並修改你的j-index for-loop以包含整個范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.