0

乱数を2D配列に並べ替えるのに助けが必要です。配列の列に50個の乱数を生成してから、番号を順番に並べ替える必要があります(昇順または降順)。これは私がこれまでに持っていたものであり、とても失われています。助けてください。

更新版

public static void main(String[] args) 
{
    int rows = 2;
    int columns = 50;

    int[][] anArray = new int[rows][columns];

    Random rand = new Random();

    for (int i = 0; i < anArray.length; i++) 
    {
        for (int j = 0; j < anArray[0].length; j++) 
        {
            int n = rand.nextInt(100);
            anArray[i][j] = n;
        }
    }

    int []temp;
    for (int i=0;i<anArray.length;i++)
        {  
            for (int j=0;j<anArray.length-i;j++ )
            {
                if (anArray[i][j]>anArray[i][j+1])
                {  
                    temp =anArray[j];
                    anArray[j+1]=anArray[j];
                    anArray[j+1]=temp;
                }
            }
        } 

    for (int i = 0; i < anArray.length; i++) 
    {
        for (int j=0;j<anArray.length-i;j++ )
        { 
            System.out.println(anArray[i][j]);
        }
    }          
}
}
4

3 に答える 3

1

カスタムを使用して、最初の要素で 2D 配列を並べ替えることができますComparator

Arrays.sort(anArray, new Comparator<int[]>() {
    public int compare(int[] lhs, int[] rhs) {
        return lhs[0]-rhs[0];
    }
});
于 2012-11-14T04:24:57.237 に答える
0

2D配列を1Dと考えてソートできます。3x4 配列を考えてみましょう。1 番目の要素のインデックスは 0、2 番目は 1、3 番目は 2、4 番目は 3、5 番目は 4 などです。

1D インデックスから 2D インデックスに変換する一般式:

row_index = _1D_index % nRows;
col_index = _1D_index % nCols;

たとえば、5 番目の要素の 1D インデックスは 4 で、行を取得するには 4 % 3 = 1、列を取得するには 4 % 4 = 0 なので、要素は 1,0 になります。このすべてのポイントは何ですか?これで、関数を作成できます

int GetAt(int index)
{
    return array[index % nRows][index % nCols];
}

そして、次のようなもの:

void Swap(int index1, int index2)
{
   int r1 = index1 % nRows;
   int c1 = index1 % nCols;
   int r2 = index2 % nRows;
   int c2 = index2 % nCols;
   int temp = array[r1][c1];
   array[r1][c1] = array[r2][c2];
   array[r2][c2] = temp;
}

そして、それが一次元であるかのように配列をソートします:)

于 2013-07-07T01:57:18.340 に答える
0

まず、乱数を 2 次元配列に適切に挿入するには、for ループをネストする必要があります。また、並べ替えを行う方法を示すために、応答を更新しました。お役に立てれば!

以下のコメントで言及されている要件を満たすように編集されています。

import java.util.Arrays;
import java.util.Random;


public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
    int rows = 2;
    int columns = 50;

    int[][] anArray = new int[rows][columns];

    Random rand = new Random();
    //initialize the first row only
    for (int j = 0; j < anArray[0].length; j++) 
    {
       int n = rand.nextInt(100);
       anArray[0][j] = n;
    }
    System.out.println("-----------Before the Sort----------------");
    for (int i = 0; i < anArray.length; i++) 
    {
        for (int j = 0; j < anArray[0].length; j++)
        {               
           System.out.print(anArray[i][j] + ", ");  //format any way you want
        }
        System.out.println(); //to make each row print on a new line.
    }
    anArray = mySort(anArray);
    System.out.println("-----------After the Sort----------------");
    for (int i = 0; i < anArray.length; i++) 
    {
        for (int j = 0; j < anArray[0].length; j++)
        {               
           System.out.print(anArray[i][j] + ", ");  //format any way you want
        }
        System.out.println(); //to make each row print on a new line.
    }
}

private static int[][] mySort(int[][] anArray) {
    int [][] result = new int[anArray.length][anArray[0].length];
    int thisRow[] = getRow(anArray, 0);
    Arrays.sort(thisRow);
    for(int j = 0; j < thisRow.length; j++){
        result[0][j] = anArray[0][j];
        result[1][j] = thisRow[j];
    }
    return result;
}

private static int[] getRow(int[][] anArray, int row) {
    int thisRow[] = new int[anArray[row].length];
    for(int j = 0; j < anArray[row].length; j++){
        thisRow[j] = anArray[row][j];
    }
    return thisRow;
}

}

于 2012-11-14T04:28:39.773 に答える