Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Arbeiten mit Vector » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): « vorherige 1 [2] Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Arbeiten mit Vector
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein, ich nehme dir das nicht krumm, ich kann dabei ja auch noch etwas lernen. Die Map ist wirklich kompakt.
Aber einen kleinen Schwachpunkt hat dein Programm: es wertet bereits die Zeile "*** START OF THIS PROJECT GUTENBERG EBOOK SIDDHARTHA ***" aus. Mein Programm zerlegt erst ab der Zeile danach den Text.

__________________
Syntax Highlighting fürs Board (Link)
21.07.2013 07:04 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Stimmt. smile

Die skip-Logik kann man natürlich nach Belieben wieder austauschen.

Eine nennenswerte Änderung war übrigens noch, dass ich den BufferedReader wieder geschlossen habe.

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
21.07.2013 12:53 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank
Man darf doch ein Vector kopieren oder?
Ich habe im Internet diesen Code gefungen
code:
1:
  Vector<Zeichenkette> topdatei = new Vector(new_datei);

Ich wollte diesen kopierten Vector nach der Häufigkeit der Wörte sortieren.
Deswegen habe ich in die Klasse von Zeichenkette diese Methode geschrieben
code:
1:
2:
3:
4:
5:
6:
 public boolean besserAls(Zeichenkette zweiter) {
        if (this.anzahl >= zweiter.anzahl) {
            return true;
        }
        return false;
      }

Und dann in die Klasse diese Methode geschrieben um die 5 häufigsten Wörter zu ermitteln
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public void top20(){
        Zeichenkette tmp;
        Zeichenkette tmp2=new Zeichenkette(null);
        for (int i = 0; i < topdatei.size(); i++) {
            tmp = this.topdatei.get(i);
            if (tmp.besserAls(tmp2)) {
                        tmp2 = tmp;
                       topdatei.add(1,tmp2);
                    }
        }
       for(int j=0;j<5;j++){
         topdatei.elementAt(j).toString();
       } 
    }

Aber irgendwie macht das Programm nicht das, was ich will(
21.07.2013 18:44 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn es die "Top 5" sein sollen, dann sollte die Methode vielleicht auch "top5" und nicht "top20" heißen – so nebenbei.

Zu Lehrzwecken würde ich dich mal bitten, einfach zu erklären, wie die Methode top20 (bzw. top5) eigentlich funktionieren soll – also einfach nur in Worten. Gefühlt hast du da was geschrieben, ohne genau zu wissen, was du eigentlich schreiben willst.
Außerdem solltest du dir angewöhnen, Probleme detaillierter als "geht nicht" oder "tut nicht, was ich will" zu beschreiben. Was soll es tun, was tut es tatsächlich, wie sehen Input und Output aus, …

Die besserAls-Methode könnte man etwas kürzer auch einfach als

code:
1:
2:
3:
public boolean besserAls(Zeichenkette zweiter) {
    return this.anzahl >= zweiter.anzahl;
}


schreiben, wobei ich einwenden möchte, dass das eine "besser als oder gleich gut"-Relation ist, keine "besser als"-Relation.

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Airblader: 21.07.2013 23:21.

21.07.2013 23:20 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Es sollten 20 Wörter sein aber, weil die Datei zu groß ist, habe ich eine kleine Testdatei gemacht( also alles gelöscht bis zwei Sätze) und es sind weniger Wörter als 20, deswegen auch auf fünf abgeändert.

Zu meinen Gedankengang:
Die Methode besserAls soll true zurückgeben, wenn das erste "Wort" häufiger vorkommt als das zweiten "Wort".
Dann habe ich bei der Methode top20 zwei Variable angelegt. In der zweiten Variabel(tmp2) steht nichts( also "null" und die Zahl ist 1) und die erste Variabel(tmp) wird durch die for-Schleife gefühlt.
Wenn die erste Variabel besser ist als die zweite, dann soll die in der zweiten Variabel gespeichert und gleichzeitig im Vector auf die Position 1 gerückt.

Und wenn der Vector sortiert ist, sollen die ersten fünf "Wörter" ausgegeben werden.

Wenn ich die funktion abrufe, dann bekomme ich diese Meldung
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
und damit kann ich nichts anfangen(
22.07.2013 08:45 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn man sich einen Algorithmus ausdenkt, sollte man ihn zumindest an ein paar Beispielen mal ausprobieren -- insbesondere an Extremfaellen. Spiele doch mal Schritt fuer Schritt durch, welche Ausgabe zu erwarten waere, wenn topdatei so aussaehe:

topDatei = 10, 2, 3, 4, 5, 6


Es ist uebrigens keine gute Idee, ein Objekt zu veraendern, ueber das du iterierst. Ebenfalls weniger gut ist, dass du Eintraege in topDatei nicht verschiebst, sondern klonst.

Was die Exception verursacht kannst du herausfinden, indem du dir den Stacktrace anschaust und/oder mit dem Debugger in Einzelschritten durch das Programm gehst. Das sind Methoden, die man sich schnell angewoehnen sollte, um nach Fehlern zu suchen. Was das Problem ist sagt "ArrayOutOfBoundsException" ja ganz deutlich, du musst nur noch rausfinden wo und warum dies passiert.

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
22.07.2013 19:05 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Airblader

Es ist uebrigens keine gute Idee, ein Objekt zu veraendern, ueber das du iterierst. Ebenfalls weniger gut ist, dass du Eintraege in topDatei nicht verschiebst, sondern klonst.


Ich habe versuch die Einträge zu verschieben, leider wird der Vector dann immer länger und länger(
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 public void top20(){

        Zeichenkette tmp;
        Zeichenkette tmp2 = new Zeichenkette(null);
        for (int j = 0; j < topdatei.size(); j++) {
            tmp = this.topdatei.elementAt(j);
            if (tmp.größerAls(tmp2)) {
                Zeichenkette tmp3 = topdatei.elementAt(j);
                topdatei.add(j, tmp2);
                topdatei.add((j+1), tmp3);
            }
        }
    }

Oder funktioniert es anders?
31.07.2013 18:43 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

- Du vergleichst tmp mit tmp2; tmp2 ist aber frisch erstellt und hat keinen nennenswerten Inhalt.
- mit Vector.add fügst du etwas an den Vector dran/ in der Mitte ein. Zum Überschreiben des alten Wertes: Vector.set(index, wert)
- ich nehme an, du willst den Bubblesort implementieren? Da brauchst du zwei verschachtelte Schleifen.

__________________
Syntax Highlighting fürs Board (Link)
31.07.2013 19:43 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Lycaner
Eroberer


Dabei seit: 17.02.2013
Beiträge: 56

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ok, ich habe das jetzt
Vielen Dank
31.07.2013 20:19 Lycaner ist offline Beiträge von Lycaner suchen Nehmen Sie Lycaner in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Lycaner
Ich habe versuch die Einträge zu verschieben


Nochmal: Es ist keine gute Idee, ein Objekt, über das du iterierst, zu verändern. Es führt einfach zu vielen Problemen. Die etwas einfachere Version der Problematik zeigt es vielleicht besser:

code:
1:
2:
3:
4:
5:
int numberOfRuns = 10;

for( int i = 1; i <= numberOfRuns; i++ ) {
    numberOfRuns++;
}


__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
01.08.2013 10:55 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Seiten (2): « vorherige 1 [2] Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Arbeiten mit Vector