Avatar billede juahm Nybegynder
25. december 2005 - 19:19 Der er 5 kommentarer og
1 løsning

Sortering af 2D array på en kolonne

Hej Eksperter
Jeg er i gang med mit et eksamensprojekt i mit første java kursus.
Jeg er så stødt på nogle problemer med at sortere nogle data i et
2-dimensionel array. Dette skal gøres rækkevis på den sidste kolonne.
De 4 første kolonner indeholder henholdsvis et reference nummer, x og y koordinat, Samt en vægt/efterspørgsel. Den sidste kolonne indeholder afstanden fra et optimum koordinat og det respektive x og y i rækken.

Tallene i arrayet kan se således ud:

x* = 8,586311
y* = 11,902583

6    10    12    41    1   
1    5    13    31    3   
2    8    18    28    6   
3    0    0    19    14   
4    6    3    53    9   
5    14    20    32    9

Jeg har googlet og set bunkevis af sider på java api, men har ikke fundet en måde at lave dette på.  Jeg håber at der nogle der kan hjælpe mig med mit problem, da jeg er newbie til det her.
Avatar billede juahm Nybegynder
25. december 2005 - 19:24 #1
glemte at skrive det skal gøres i stigende orden.
Avatar billede arne_v Ekspert
25. december 2005 - 19:52 #2
til inspiration:

package december;

import java.util.Random;

public class Sort2D {
    private final static int N = 10; // rækker
    private final static int M = 3; // kolonner
    private final static int KEY = 0; // second dimension that we sort after 0=first column
    private static Random rng = new Random();
    private static void init(int[][] a) {
        for(int i = 0; i < N; i++) {
            for(int j = 0; j < M; j++) {
                a[i][j] = rng.nextInt(1000);
            }
        }
    }
    private static void print(int[][] a) {
        for(int i = 0; i < N; i++) {
            for(int j = 0; j < M; j++) {
                System.out.print(" " + a[i][j]);
            }
            System.out.println();
        }
    }
    private static void sort(int[][] a) {
        for(int i = 0; i < N; i++) {
            for(int i2 = (i + 1); i2 < N; i2++) {
                if(a[i][KEY] > a[i2][KEY]) {
                    int tmp;
                    for(int j = 0; j < M; j++) {
                        tmp = a[i][j];
                        a[i][j] = a[i2][j];
                        a[i2][j] = tmp;
                    }
                }
            }
        }
    }
    public static void main(String[] args) {
        int[][] a = new int[N][M];
        init(a);
        System.out.println("Unsorted:");
        print(a);
        System.out.println("Sorted:");
        sort(a);
        print(a);
    }
}
Avatar billede juahm Nybegynder
25. december 2005 - 21:40 #3
Tusind tak Arne det var lige det der manglede :).
Avatar billede juahm Nybegynder
25. december 2005 - 21:42 #4
send venligst et svar Arne.
Avatar billede juahm Nybegynder
25. december 2005 - 21:42 #5
Outputtet ser således ud nu.

6    10    12    41    1   
1    5    13    31    3   
2    8    18    28    6   
4    6    3    53    9   
5    14    20    32    9   
3    0    0    19    14
Avatar billede arne_v Ekspert
25. december 2005 - 21:54 #6
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester