【发布时间】:2016-02-22 01:51:42
【问题描述】:
我的任务是创建一个 2D 数组(10×10),用随机数(从 10 到 99)填充它,以及其他任务。但是,如果不使用数组 sort() 方法,我很难按升序对该数组的每一行进行排序。
我的排序方法没有排序。相反,它从最左上角到右下角沿对角线打印值。我应该怎么做才能对数字进行排序?
这是我的代码:
public class Program3
{
public static void main(String args[])
{
int[][] arrayOne = new int[10][10];
int[][] arrayTwo = new int[10][10];
arrayTwo = fillArray(arrayOne);
System.out.println("");
looper(arrayTwo);
System.out.println("");
sorter(arrayTwo);
}
public static int randomRange(int min, int max)
{
// Where (int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);
return (int)(Math.random()* ((max - min) + 1) + min);
}
public static int[][] fillArray(int x[][])
{
for (int row = 0; row < x.length; row++)
{
for (int column = 0; column < x[row].length; column++)
{
x[row][column] = randomRange(10,99);
System.out.print(x[row][column] + "\t");
}
System.out.println();
}
return x;
}
public static void looper(int y[][])
{
for (int row = 0; row < y.length; row++)
{
for (int column = 0; column < y[row].length; column++)
{
if (y[row][column]%2 == 0)
{
y[row][column] = 2 * y[row][column];
if (y[row][column]%10 == 0)
{
y[row][column] = y[row][column]/10;
}
}
else if (y[row][column] == 59)
{
y[row][column] = 99;
}
System.out.print(y[row][column] + "\t");
}
System.out.println();
}
//return y;
}
public static void sorter(int[][] z)
{
int temp = 0;
int tempTwo = 0;
int lowest;
int bravo = 0;
int bravoBefore = -1;
for (int alpha = 0; alpha < z.length; alpha++)
{
//System.out.println(alpha + "a");
lowest = z[alpha][bravoBefore + 1];
bravoBefore++;
for (bravo = alpha + 1; bravo < z[alpha].length; bravo++)
{
//System.out.println(alpha + "b");
temp = bravo;
if((z[alpha][bravo]) < lowest)
{
temp = bravo;
lowest = z[alpha][bravo];
//System.out.println(lowest + " " + temp);
//System.out.println(alpha + "c" + temp);
tempTwo = z[alpha][bravo];
z[alpha][bravo] = z[alpha][temp];
z[alpha][temp] = tempTwo;
//System.out.println(alpha + "d" + temp);
}
}
System.out.print(z[alpha][bravoBefore] + "\t");
}
/*
for (int alpha = 0; alpha < z.length; alpha++)
{
for (int bravo = 0; bravo < z.length - 1; bravo++)
{
if(Integer.valueOf(z[alpha][bravo]) < Integer.valueOf(z[alpha - 1][bravo]))
{
int[][] temp = z[alpha - 1][bravo];
z[alpha-1][bravo] = z[alpha][bravo];
z[alpha][bravo] = temp;
}
}
}
*/
}
}
【问题讨论】:
-
有很多问题。一个大问题:鉴于
temp将始终等于bravo,z[alpha][bravo] = z[alpha][temp];会做什么?如果要对整行中的数字进行排序,为什么你的内循环从alpha + 1开始?这将跳过一堆数字。另外,您的分拣机应该打印任何东西吗?如果是这样,是什么?您遍历各行,每行只打印一个数字。 -
@ajb 我创建数组的目的是(例如)两个值,int a = 100 和 int b = 85,以及一个 temp。如果 a
-
下一个数字在哪一行?您的外部循环遍历每一行。当内部循环开始时,您正在查看以前未查看过的新行。那么您不想从新行中的第一个元素开始吗?按照您的编写方式,当您查看
z[5]时,您首先查看的是z[5][5]。你的程序从不查看z[5][0]、z[5][1]、...、z[5][4]。
标签: java arrays sorting multidimensional-array