OOP Identifzierung eines Objektes innerhalb eines Array

DefconDev

Bekanntes Mitglied
Hallo zusammen,

ich bin gerade auf der Suche nach einer Möglichkeit, Objekte innerhalb eines Arrays zu identifizieren ohne Vergleich.

Ich erkläre euch ganz kurz was ich eigentlich umgehen möchte.


Ich habe eine Klasse namens Spieler, innerhalb dieser Klasse sind die "üblichen" Instanzattribute wie
String name;
int punkte;


Jetzt möchte ich ein paar Objekte dieser Klasse Spieler erstellen und in ein Spieler array[] speichern.

Anschließend möchte ich die Instanzattribute der jeweiligen Klasse individuell verändern.

Bisher habe ich das so gelöst.

Java:
if(arraySpieler[i].name == "Theo")
{
//ändere Punkte von Spieler a;
}
else if(if(arraySpieler[i].name == "Jogi")
{
//ändere Punkte von Spieler b;
}

Also anhand des String name, den ich dem jeweiligen Objekt über den Konstruktor zu anfang vergeben habe.


Jetzt stellt sich mir aber die Frage ob es einen anderen Weg gibt ohne für jedes Objekt einen Vergleich aufzustellen. Es könnte der Fall auftreten dass ich 100 Objekte von der Klasse Spieler hätte, dann müsste ich 100 vergleiche aufschreiben.

Ich hoffe ihr konntet mir folgen.
 
Zuletzt bearbeitet:
Java:
if(arraySpieler[i].name == "Theo")
{
//ändere Punkte von Spieler a;
}
else if(if(arraySpieler[i].name == "Jogi")
{
//ändere Punkte von Spieler b;
}

[WR]Strings vergleicht man mit equals und nicht mit ==[/WR]

Falls du beim Array bleiben willst, wäre folgendes möglich:

Java:
import java.util.*;

/**
 *
 * @author Kiri
 */
public class BinarySearch {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Player[] players = new Player[]{new Player("Theo"), new Player("Jogi"), new Player("Hades")};
        Arrays.sort(players);
        String[] playersNames = new String[players.length];
        
        for(int i = 0; i < players.length; i++){
            playersNames[i] = players[i].getName();
        }
        Arrays.sort(playersNames);
        
        int id = Arrays.binarySearch(playersNames, "Jogi");
        players[id].setPoints(12);
        
        int id2 = Arrays.binarySearch(playersNames, "Hades");
        players[id2].setPoints(123);
        
        int id3 = Arrays.binarySearch(playersNames, "Theo");
        players[id3].setPoints(234);
        
        for(Player player : players){
            System.out.println("Name: " + player.getName() + " - Punkte: " + player.getPoints());
        }
    }
}

Java:
public class Player implements Comparable{
    private final String name;
    private int points;
    
    public Player(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }
    
    public int getPoints(){
        return points;
    }
    
    public void setPoints(int points){
        this.points = points;
    }

    @Override
    public int compareTo(Object t) {
        Player player = (Player)t;
        return this.getName().compareTo(player.getName());
    }
}
 
Zuletzt bearbeitet:
Der Vergleich mit equals ist mir durchaus bewusst, nur in meinem Beispiel funktioniert es auch mit == weil beide Strings die selbe Referenz haben.

Aber viele Danke an euch beide. Ich werde mir beide Möglichkeiten anschauen.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben