Wie StringObjekte zusammenzählen?

Status
Nicht offen für weitere Antworten.

Linad

Mitglied
hallo allerseits

also ich habe gerade eine kleine übung angefangen und da steht, man solle ausgeben können wieviele stringobkjekte erzeugt wurden. wie kann ich das erreichen??

hier mein code:
Code:
public class LiteralTester {
    
    private String str1 = "Bo, die Katze";
    private String str2 = "Bo, die Katze";
    private String str3 = new String("Fred, der Hund");
    private String str4 = new String("Fred, der Hund");
    
    private boolean urteil;
    
    int objectCounter = 0;
    
    public void stringTester(){
        
        if (this.str1 == this.str2){
            System.out.println(urteil = true);
        }
        else 
            System.out.println(urteil);
        
        if (this.str3 == this.str4){
            System.out.println(urteil = true);
        }
        else
            System.out.println(urteil = false);
    }  

    public static void main(String[] args) {
        
        LiteralTester a = new LiteralTester();
        
        a.stringTester();
    }
}

das ergebnis sollte ja drei geben, da str1 und str2 auf das gleiche objekt zeigen.

vielen dank für die hilfe.

gruss
tikami
 
B

Beni

Gast
Ich denke, nur mit ein paar if's kommst du da nicht weit.

Eigentlich muss ja jeder String mit allen anderen verglichen werden, dann ist es am einfachsten einen Array herzustellen, und mit zwei ineinanderverschachtelten Schleifen alle Paar zu prüfen. (Wenn man zwei gleiche Strings findet, kann man einen löschen, und mit dem anderen weitervergleichen. Schlussendlich werden im Array nur noch verschiedene Strings sein, weil alle Paare gleicher Strings aufgelöst werden).

Das könnte so aussehen:
Code:
        String[] array = new String[4];
        array[0] = "Bo, die Katze";
        array[1] = "Bo, die Katze";
        array[2] = new String( "Hund" );
        array[3] = new String( "Hund" );

        for( int i = 0; i < array.length; i++ ){
            for( int j = i + 1; j < array.length; j++ ){
                // Alle String-Paare vergleichen

                if( array[i] != null && array[j] != null ){
                    // Sollte einer der String gelöscht sein, nichts tun
                    
                    if( array[i] == array[j] ){
                        // Zweimal denselben String gefunden, eine Version löschen
                        System.out.println( "\"" + array[i] + " == " + array[j]
                                + "\" ergibt: " + true );
                        array[j] = null;
                    }
                    else{
                        // Zwei verschiedene Strings gefunden, weiter gehts
                        System.out.println( "\"" + array[i] + " == " + array[j]
                                + "\" ergibt: " + false );
                    }
                }
            }
        }

        // Die verbleibenden String zählen.
        int count = 0;
        for( int i = 0; i < array.length; i++ )
            if( array[i] != null )
                count++;

        System.out.println( "Es gibt " + count + " verschiedene Strings" );


[Edit: Ja, man könnte auch etwas mit Hashtable oder TreeSets herstellen, das war aber glaub ich nicht der Sinn der Übung :wink: ]
 

Linad

Mitglied
habe den code gerade getestet und er funktioniert einwandfrei. trotzdem habe ich noch eine frage:

kann man nicht irgendwie direkt auf die klasse string zugreifen und dort überprüfen, wieviel mal der konstruktor aufgerufen wurde?
 

L-ectron-X

Gesperrter Benutzer
Nein, dann müsste es in der Klasse String eine statische Zählervariable geben, was die Klasse String in ihrer Nutzbarkeit einschränken würde.
Solche Dinge muss man schon selber kapseln.
 
B

bygones

Gast
generell könnte man ja von der klasse erben lassen und diese zählervariable einführen, leider unterbindet das ja die Klasse String .... (auch wenn das wahrscheinlich eine brute-force-methode wäre ;) )
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben