ustawianie malejaco elementow

0

witam,
Jestem na bardzo początkującym poziomie jeśli chodzi o programowanie. Nie rozumiem gdzie jest bład w ponizszym kodzie. moje zadanie polega na ustawieniu malejąco elementów tabeli (Zawodnik tab[];) wzgledem wartosci punktów (klasa Zawodnik ma dwa pola String nazwisko, int punkty).

void ustawMalejaco(){
        for(int i=0; i<tab.length; i++){
         int max = i;
         for(int j=i; j<tab.length; j++){
             System.out.println(tab[i].punkty);
             if(tab[j].punkty>tab[max].punkty){
             max = j;
             }
        }
       Zawodnik temp = tab[i];
       tab[i] = tab[max];
       tab[max] = temp;
    }
       for (int i=0; i<tab.length; i++)
       System.out.print(tab[i]+" ");
    }

przy if(tab[j].punkty>tab[max].punkty) wyskakuje mi null pointer exception.
Gdy ten kod wykorzystuje do sortowania tabeli typu int wszystko działa jak należy (wtedy if wyglada tak: if(tab[j]>tab[max]) ). Zle sie odwoluje do pola punkty?

dziekuje za pomoc!

0

bardzo mozliwe ze masz jakiegos nulla w tej tablicy.
Wyciagnij osobno tab[j] i tab[max] i zobacz czy nie sa to wartosci null.

Btw, Jesli chcesz posortowac tablice obiektow jakiejs klasy, to zrob zeby ta klasa implementowala interfejs Comparable a nastepnie do posortowania tablicy uzy jednej metody Arrays.sort(tab);
Kolejna dobra praktyka jest tworzenie prywatnych pol a dostep do nich tylko przez metode getXXX

0
package forum;

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

/**
 * Test.
 *
 * @author pustak
 * @version 0.1.0
 */
public final class Test {
    /**
     * Main.
     * 
     * @param args
     */
    public final static void main(final String[] args) {
        // tworze tablice zawodników
        final Player[] playersArray = new Player[5];
        final Random rnd = new Random();
        // Wypełniam tablicę
        for (int i = 0; i < playersArray.length; i++) {
            // tworze zawodnika
            playersArray[i] = new Player("Zawodnik", Integer.toString(i));
            // ustawiam liczbę punktów
            playersArray[i].setPoints(rnd.nextInt(50));
        }
        // wypisuje stworzonych zawodników
        System.out.println("Przed sortowaniem:");
        System.out.println(Arrays.toString(playersArray));
        // sortuje
        Arrays.sort(playersArray, new PlayerPointsComparator());
        System.out.println("Po sortowaniu:");
        System.out.println(Arrays.toString(playersArray));
    }
}

/**
 * Zawodnik.
 *
 * @author pustak
 * @version 0.1.0
 */
class Player {
    /**
     * Imię.
     */
    private String name;
    
    /**
     * Nazwisko.
     */
    private String surname;
    
    /**
     * Punkty.
     */
    private int points;
    
    /**
     * Konstruktor.
     * 
     * @param n imię 
     * @param sn nazwisko
     */
    public Player(final String n, final String sn) {
        this.name = n;
        this.surname = sn;
        // początkowa iość punktów zawodnika
        this.points = 0;
    }

    /**
     * Zwraca imię.
     *
     * @return imię
     */
    public String getName() {
        return name;
    }

    /**
     * Ustawia imię.
     *
     * @param n imię
     */
    public void setName(final String n) {
        this.name = n;
    }

    /**
     * Zwraca nazwisko.
     *
     * @return nazwisko
     */
    public String getSurname() {
        return surname;
    }

    /**
     * Ustawia nazwisko.
     *
     * @param sn nazwisko
     */
    public void setSurname(final String sn) {
        this.surname = sn;
    }

    /**
     * Zwraca ilość punktów zawodnika.
     *
     * @return punkty zawodnika
     */
    public int getPoints() {
        return points;
    }

    /**
     * Ustawia ilość punktów zawodkika.
     *
     * @param p punkty.
     */
    public void setPoints(final int p) {
        this.points = p;
    }
    
    /**
     * {@inheritDoc}
     */
    @Override
    public String toString() {
        return "\n" + name + " " + surname + ", " + points;
    }
}

/**
 * Porównywacz zawodników pod względem ilości punktów.
 *
 * @author pustak
 * @version 0.1.0
 */
class PlayerPointsComparator implements Comparator<Player> {
    
    /**
     * {@inheritDoc}
     */
    @Override
    public final int compare(final Player p1, final Player p2) {
        if (p1 == null && p2 == null) {
            return 0;
        } else if (p1 == null) {
            return 1;
        } else if (p2 == null) {
            return -1;
        }
        return new Integer(p1.getPoints()).compareTo(p2.getPoints());
    }
    
}

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