Wątek zablokowany 2014-05-15 23:03 przez furious programming.

Wątek przeniesiony 2014-05-15 19:27 z Java przez bogdans.

Sortowanie obiektów w tablicy

0

Witam. Chciałbym posortować obiekty w tablicy. Nie wiem jak to zrobić. Znalazłem ten oto kawałek kodu, ale nie działa. Czy mógłby ktoś pomóc w napisaniu takiej klasy?

import java.util.Comparator;

public class Komparator implements Comparator<Karta>{

	@Override
	public int compare(Karta k1, Karta k2) {
		if(k2 == null) return -1;
		if(k1.getNumer(0) > k2.getNumer(0)) return 1;
		else if(k1.getNumer(0) < k2.getNumer(0)) return -1;
		else return 0;
	}
} 

Z góry dzięki

0

Zamieszczony kod niczego nie sortuje, musisz jeszcze wywołać funkcję sortującą.

Arrays.sort(tablica,new Komparator());
0

tylko Arrays.sort nie działa "ja mam w ten sposób:

Arrays.sort(hand[0], kom); //to znajduje sie w klasie main.java

mam taki komunikat:

The method sort(T[], Comparator<? super T>) in the type Arrays is not applicable for the arguments (Hand, Komparator)

ten komparator mam w osobnej klasie

dodanie znaczników <code class="java"> - furious programming

0

Ewentualnie możesz użyć wyrażeń lambda (nie testowane):

tablica.sort((x, y) -> x.getNumer(0).compareTo(y.getNumer(0)));
0

Musisz jako parametr podać tablicę, czyli hand a nie pierwszy element tablicy hand[0]...

0
	
	public int wygrana(Hand[] hand){
		//Podsumowanie "punktacji", kto zdobył więcej punktów
		for(int i=0; i<ilosc_graczy; i++){
			hand[0].getHand();
			Arrays.sort(hand[0], kom);
			hand[0].getHand();
		}
		
		return 1;
	}
	

samo hand nie działa

podkreśla sort i jest ten komunikat, który zamieściłem wyżej :D

0

Ten kod jest bez sensu:

  1. Argumentem metody sort musi być tablica, a nie jej pierwszy element.
  2. W pętli wykonujesz wielokrotnie jakieś bezsensowne operacje.
0

Klasa hand jest tablicą obiektów typu karta (5 kart w "ręce").
W grze, jako, że grać będzie do 3 osób, to tych "rąk" będzie trzy.
Hand jest więc tablicą 3 "handów", które to są tablicą 5 kart.
Pętla była po to by posortować wszystkie trzy "ręce", by karty w każdej z nich były po kolei.
A 0 jest użyte tylko dlatego, by przetestować czy jedna z tych "rąk" działa (jak zadziała to i pozostałe też), tylko że kompilator wyświetla błędy.
Generalnie można by było wstawić tam "i", jednak nie rozwiąże to chyba problemu.

1

Przeczytaj jakiś kurs podstaw Javy, a dopiero potem bierz się za pisanie gier.

0

dzięki za pomoc "znawco javy" ... bez sensu było pisanie tutaj o pomoc...

proszę o usunięcie tego tematu

0

Po pierwsze nie obrażaj osób, które mają sporo większe pojęcie o programowaniu niż Ty. Nie umiesz podstawowych operacji na tablicach a chcesz pisać gry etc. Najpierw naucz sie podstaw a potem bierz się za pisanie większych rzeczy. Wrzucam kod na sortowanie tablic, ponieważ nie mogę patrzeć na to co napisałeś wyżej...

package arrays_sort;

/**
 * Author: Daniel
 */
public class Karta {
    private int numer;

    public Karta(int numer) {
        this.numer = numer;
    }

    public int getNumer() {
        return numer;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Karta{");
        sb.append("numer=").append(numer);
        sb.append('}');
        return sb.toString();
    }
}
package arrays_sort;

import java.util.Comparator;

/**
 * Author: Daniel
 */
public class Komparator implements Comparator<Karta> {
    @Override
    public int compare(Karta k1, Karta k2) {
        if(k2 == null) return -1;
        if(k1.getNumer() > k2.getNumer()) return 1;
        else if(k1.getNumer() < k2.getNumer()) return -1;
        else return 0;
    }
}
package arrays_sort;

import java.util.Arrays;

/**
 * Author: Daniel
 */
public class Runner {
    public static void main(String[] args) {
        Karta karta1 = new Karta(2);
        Karta karta2 = new Karta(1);
        Karta karta3 = new Karta(4);
        Karta karta4 = new Karta(2);
        Karta karta5 = new Karta(6);

        Karta[] karty = new Karta[5];

        karty[0] = karta1;
        karty[1] = karta2;
        karty[2] = karta3;
        karty[3] = karta4;
        karty[4] = karta5;

        Arrays.sort(karty, new Komparator());

        System.out.println(Arrays.toString(karty));
    }
}
0

nie mów mi co mam robić.. dzięki za odpowiedź

Czy mogę prosić o usunięcie tego tematu?

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