Sortowanie tablicy 2 wymiarowej po kolumnie

0

Witam

Chciałbym prosić o doradzenie, w jaki sposób posortować tablicę double po 3 kolumnie.

public double[][] wynik = {
{1.0, 1.0, 1.42},
{1.0, 2.0, 1.0},
{1.0, 3.0, 1.0} }; 

Chciałbym znać najmniejszą wartość w kolumnie 3, po to, żeby następnie porównać wartość 1 i 2.
Tablica jest dynamiczna, więc 1 wymiar może się zmieniać, 2 wymiar jest stały.

Pozdrawiam

0

Umieszczaj trójki liczb w jakiejś własnej klasie. Wsadzaj to do ArrayList a nie do tablicy. I posortuj używając własnego comparatora.

0

Witam

Próbuję coś takiego napisać.
Nie wiem, tylko czy dobrze myślę.

/**/
public class WynikKlasyfikacji {
    public double klasaT;
    public double klasaK;
    public double odleglosc;
}
/**/

ArrayList<Object> wynikLista = new ArrayList<Object>();
    public void Klasyfikacja(){

        for(int b=0;b<kDouble.length;b++){
            myWynik.klasaT = tDouble[0][0];
            myWynik.klasaK = kDouble[b][0];
            double wynikTest = 0;
            for(int a = 1; a < tDouble[0].length; a++){
                wynikTest = wynikTest + Math.pow((kDouble[b][a] - tDouble[0][a]), 2);
            }
            myWynik.odleglosc = Math.sqrt(wynikTest);
            wynikLista.add(myWynik);
            myWynik.WyswietlenieWynikow();
            }

        //Comparator i sort

    }
</java>

Nie wiem, czy w ten sposób mogę to zrobic, w sumie to nie wiem jak teraz dobrać sie do ArrayList

Pozdrawiam
0

Witam

Dziękuję za odpowiedź, ale nie jestem pewien, czy dobrze dane wpisuje do ArrayList.
Nie bardzo mogę dane z powrotem uzyskać.

Pozdrawiam

0

Nie wiesz, jak uzyc ArrayList ?

ArrayList<WynikKlasyfikacji> list = new ArrayList<WynikKlasyfikacji>();
WynikKlasyfikacji w = new WynikKlasyfikacji();
// operacje na "w"
list.add(w);
// ...
for (WynikKlasyfikacji wyn : list) {
  System.out.println(wyn); // zadziala, jesli przeciazysz metode toString() w klasie WynikKlasyfikacji
}
// a jesli chcesz sie dostac do i-tego elementu to 
WynikKlasyfikacji wyn2 = list.get(2);
0

Witam

Poradziłem sobie w trochę inny sposób:
Szukam wartości minimalnej przez pętlę i warunek if.

<code = java>
wynik = new double[kDouble.length][tDouble[0].length];

        for(int c=0;c<tDouble.length;c++){
        for(int b=0;b<kDouble.length;b++){
        wynik[b][0] = tDouble[c][0];
        wynik[b][1] = kDouble[b][0];
        double wynikTest = 0;
        for(int a = 1; a < tDouble[0].length; a++){
            wynikTest = wynikTest + Math.pow((kDouble[b][a] - tDouble[c][a]), 2);
        }
        wynik[b][2] = Math.sqrt(wynikTest);
        }
            for(int y=0;y<wynik.length;y++){
                for(int z=0; z<wynik[0].length;z++ ){
                    System.out.print(wynik[y][z] + " ");
                }
                System.out.println();
            }
        double minimal=100000;
        int index = 0;
        for(int a=0; a < wynik.length; a++){
            if(wynik[a][2] < minimal){
                minimal = wynik[a][2];
                index = a;
            }
        }
        if (wynik[index][0] == wynik[index][1]) {
            poprawnie ++;
        }
        else{
            blad ++ ;
        }
        System.out.println("minimal " + minimal + "wystepuje pod numerem " + index);
        }
}


Pozdrawiam i dziękuję za pomoc ;-)

ps. zobaczę jeszcze jak by to działało z ArrayList

1 użytkowników online, w tym zalogowanych: 0, gości: 1