Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java

viktor1

Mitglied
Hey,
ich bräuchte einige Tipps zur folgenden Teilaufgabe:

In dieser Aufgabe sollen Sie zwei Erweiterungen an dem in der Vorlesung vorgestellten Programm WordHistogramSample.java vornehmen.

a) Erweitern Sie die Klasse WordHistogramSample um eine Methode

static void readText (String filename) {...}

die eine normale Textdatei liest und die in jeder Zeile enthaltenen Worte in das Wort-Histogramm einfügt. Eine geeignete Vorgehensweise, um den Text einer Zeile zu zerlegen, finden Sie auf Folie OPJ-4.7 im Kapitel "Strings".

Testen Sie Ihre neue Methode readText mit den beiden Beispielsdateien:


Bisher habe ich folgendes probiert. Aus Orientierungsgründen habe ich das Bisherige als Kommentar gekennzeichnet.
Schon einmal, danke!

Java:
class WordEntry {
    String word;
    int frequency;
}

public class WordHistogramSample { //Erweitern Sie die Klasse um eine Methode static void readText (String filename) {...}
    static WordEntry[] entries;
    static int entryCount;

    static void addWord (String word) {
        int i = 0;
        while (i < entryCount && !word.equals(entries[i].word)) i++;
        if (i >= entryCount) {
            if (entryCount >= entries.length) Out.println("Zu viele Einträge.");
            else {
                WordEntry we = new WordEntry();
                we.word = word;
                we.frequency = 1;
                entries[entryCount] = we;
                entryCount++;
            }
        }
        else
            entries[i].frequency += 1;
    }

    static void removeWord (String word) {
        int i = 0;
        while (i < entryCount && !word.equals(entries[i].word)) i++;
        if (i < entryCount) {
            entries[i].frequency -= 1;
            if (entries[i].frequency <= 0) {
                entries[i] = entries[entryCount - 1];
                entryCount -= 1;
                entries[entryCount] = null;  // required by class invariant and improves garbage collection
            }
        }
    }

    static void printEntries () {
        Out.println("Anzahl Einträge: " + entryCount);
        for (int i = 0; i < entryCount; i++) {
            WordEntry we = entries[i];
            Out.println("#" + (i+1) + " " + we.word + ": " + we.frequency);
        }
    }

    static void readWordList (String filename) {
        In.open(filename);
        if (!In.done()) {
            Out.println("Datei nicht gefunden.");
            return;
        }
        String line = In.readLine();
        while (In.done()) {
            addWord(line);
            line = In.readLine();
        }
        In.close();
    }
    /*static void readText (String filename) {
        In.open (filename);
        if (!In.done()) {
            Out.println("Datei nicht gefunden.");
            return;
        }
        String text = In.readText();
        while (In.done()) {
            add(line);
            array = In.readL();
        }
        In.close();*/
    /* static void printWords (String text) {
         int i = 0, last = text.length() - 1;
         while (i <= last) {
         while (i <= last && !Character.isLetter(text.charAt(i))) i++;
         // end of text or text[i] is a letter
         int beg = i;
         while (i <= last && Character.isLetter(text.charAt(i))) i++;
         // end of text or text[i] is not a letter
         if (i > beg) Out.println(text.substring(beg, i));
     }
     }
     */

    }
    public static void main (String[] args) {
        entries = new WordEntry[1000];
        entryCount = 0;
        readWordList("words.txt");
        printEntries();
    }
}
 
ich bräuchte einige Tipps zur folgenden Teilaufgabe:
"einige Tipps" ist etwas vage, kannst Du das Problem etwas konkretisieren oder gibts konkrete Fragen? Die readWordList-Methode verwendet In, das nicht im Standard enthalten ist. Daher kann man da wenig dazu sagen, rein vom Code her sieht das Einlesen im Grundsatz richtig aus.

Allerdings zerlegst Du die Zeile nicht weiter, wie es in der Aufgabe gefordert wird:
Eine geeignete Vorgehensweise, um den Text einer Zeile zu zerlegen, finden Sie auf Folie OPJ-4.7 im Kapitel "Strings".
 
Alles klar, dann konkretisiere ich einmal: Also die Methode readWordList:

Java:
    static void readWordList (String filename) {
        In.open(filename);
        if (!In.done()) {
            Out.println("Datei nicht gefunden.");
            return;
        }
        String line = In.readLine();
        while (In.done()) {
            addWord(line);
            line = In.readLine();
        }
        In.close();

War jetzt so vorgegeben. Wenn ich es richtig verstehe, dann werden hier zeilenweise Wörter eingelesen und In.readLine(), weil es sich auf eine Datenquelle bezieht. Falls ich es falsch verstanden habe, dann gerne korrigieren und kommentieren.
Laut Aufgabenstellung muss nun eine Methode
static void readText (String filename) {...} erstellt werden, die eine normale Textdatei liest. Zudem soll mithilfe derer, das in jeder Zeile enthaltenen Worte in das Wort-Histogramm eingefügt werden.

Zum Einlesen: Es gibt zwei Testtexte, die aus Wörtern und Zeichensätzen bestehen. Meine ersten Ideen waren es, mit BufferedReader oder Scanner zu arbeiten, aber dieser verarbeiten nach meinem aktuellen Wissensstand keine Zeichensätze (, ; !). Auch hier gerne kommentieren und korrigieren. Also habe ich versucht die o.g. Methode auf eine normale Textdatei anzuwenden. Hier der Versuch:

Code:
static void readText (String filename) {
        In.open (filename);
        if (!In.done()) {
            Out.println("Datei nicht gefunden.");
            return;
        }
        String text = In.readText();
        while (In.done()) {
            add(line);
            text = In.readText();
        }
        In.close();
Mit der Idee dahinter, dass ein Abbruch erfolgt, wenn die Datei nicht gefunden wurde und wenn sie gefunden wurde, dann sollen die einzelnen Zeilen, die in der vorherigen Methode eingefordert wurden in "text" eingelesen werden.

Zu: " die in jeder Zeile enthaltenen Worte in das Wort-Histogramm einfügt": Da haben wir folgende Referenz, um den Text einer Zeile zu zerlegen, erhalten:

Code:
static void printWords (String text) {
         int i = 0, last = text.length() - 1;
         while (i <= last) {
         while (i <= last && !Character.isLetter(text.charAt(i))) i++;
         // end of text or text[i] is a letter
         int beg = i;
         while (i <= last && Character.isLetter(text.charAt(i))) i++;
         // end of text or text[i] is not a letter
         if (i > beg) Out.println(text.substring(beg, i));
     }
     }

Hier wollte ich es auch so übernehmen, denn "text" habe ich zuvor beschrieben, oder? Aber, so stelle ich für mich jetzt nicht fest, ob das in jeder Zeile enthaltenen Worte in das Wort-Histogramm eingefügt wird.

Hier noch einmal die Code-Vorlage:


Code:
class WordEntry {
    String word;
    int frequency;
}

public class WordHistogramSample { //Erweitern Sie die Klasse um eine Methode static void readText (String filename) {...}
    static WordEntry[] entries;
    static int entryCount;

    static void addWord (String word) {
        int i = 0;
        while (i < entryCount && !word.equals(entries[i].word)) i++;
        if (i >= entryCount) {
            if (entryCount >= entries.length) Out.println("Zu viele Einträge.");
            else {
                WordEntry we = new WordEntry();
                we.word = word;
                we.frequency = 1;
                entries[entryCount] = we;
                entryCount++;
            }
        }
        else
            entries[i].frequency += 1;
    }

    static void removeWord (String word) {
        int i = 0;
        while (i < entryCount && !word.equals(entries[i].word)) i++;
        if (i < entryCount) {
            entries[i].frequency -= 1;
            if (entries[i].frequency <= 0) {
                entries[i] = entries[entryCount - 1];
                entryCount -= 1;
                entries[entryCount] = null;  // required by class invariant and improves garbage collection
            }
        }
    }

    static void printEntries () {
        Out.println("Anzahl Einträge: " + entryCount);
        for (int i = 0; i < entryCount; i++) {
            WordEntry we = entries[i];
            Out.println("#" + (i+1) + " " + we.word + ": " + we.frequency);
        }
    }

    static void readWordList (String filename) {
        In.open(filename);
        if (!In.done()) {
            Out.println("Datei nicht gefunden.");
            return;
        }
        String line = In.readLine();
        while (In.done()) {
            addWord(line);
            line = In.readLine();
        }
        In.close();
    }


/ meine Codierung /


    }
    public static void main (String[] args) {
        entries = new WordEntry[1000];
        entryCount = 0;
        readWordList("words.txt");
        printEntries();
    }
}

BG
 
Hi,

wenn ich die Aufgabe richtig verstanden habe, dann hast du eine Methode(readWordList()) vorgegeben, welche eine Datei zeilenweise einliest( wobei jede Zeile aus nur einem Wort besteht) und in die Liste einfügt.
Des weiteren hast eine Methode(printWords()) vorgegeben, welche eine Zeile aus Worten in einzelne Wörter zerlegt und auf der Konsole ausgibt.

Jetzt sollst du readWordList() zu readText() umbauen, sodass nicht die ganze Zeile zur Liste hinzugefügt wird, sondern alle Wörter, der eingelesenen Zeile, einzeln. Was ein leicht umgebautes printWords() leicht machen könnte, wenn du das Wort statt auf der Konsole auszugeben, zur Liste hinzufügst.

Wo genau klemmt es?

MfG Ingo
 
>Sollte es so klappen?
Java:
static void readWordList (String filename) {
    In.open(filename);
    if(In.done()){
       String text = "";
       while(text != null){
        text = In.readLine();
        String[] words = text.split(" ")
        for(int i = 0; i< words.length; i++){
          var = words[i];
          addWord(var);
        }
        words = null;
       }
       In.close();
    }else{
      Out.println("file not found")
    }
  }
 
>Sollte es so klappen?
a) Hast Du keine Möglichkeit es zu testen?
b) Nein, ich glaube nicht, dass dies funktionieren kann.

1) In dem gegebenen Code ist die Schleife zum Lesen aus der Datei:
Java:
        while (In.done()) {
            addWord(line);
            line = In.readLine();
        }
Davon bist Du klar abgewichen. Da wird die euch gegebenen Klassen (In und co) nicht kennen, können wir aber nicht mit Sicherheit sagen, wie diese sich verhalten.

2) Wenn In.readLine() null zurück gibt, wenn nach der letzten Zeile noch gelesen wird, dann würdest Du in Zeile 6 in text null bekommen und dann in Zeile 7 auf null das split aufrufen was zu einer NullPointerException führen würde.

Daher wäre meine Aufforderung an Dich: Sorge für eine Umgebung, bei der Du mit dem Code spielen kannst um diesen dann zu übersetzen und auszuführen. Und dann mach es! Du musst Erfahrungen sammeln und das geht nur mit den Fingern an der Tastatur und direktem ausprobieren! Nur die theoretische Ausführung von Aufgaben wird Dir nicht wirklich das notwendige Wissen vermitteln.
 
Ob es klappt oder nicht, kannst du ganz einfach herausfinden, in dem du es probierst. Diese Möglichkeit habe ich leider nicht.

Was mir aber auffällt ist, dass die Methode den falsche Namen trägt und deiner Methode scheinen, im Gegensatz zur vorgegeben printWords(), Satzzeichen/Zahlen egal zu sein.
 
a) Hast Du keine Möglichkeit es zu testen?
b) Nein, ich glaube nicht, dass dies funktionieren kann.

1) In dem gegebenen Code ist die Schleife zum Lesen aus der Datei:
Java:
        while (In.done()) {
            addWord(line);
            line = In.readLine();
        }
Davon bist Du klar abgewichen. Da wird die euch gegebenen Klassen (In und co) nicht kennen, können wir aber nicht mit Sicherheit sagen, wie diese sich verhalten.

2) Wenn In.readLine() null zurück gibt, wenn nach der letzten Zeile noch gelesen wird, dann würdest Du in Zeile 6 in text null bekommen und dann in Zeile 7 auf null das split aufrufen was zu einer NullPointerException führen würde.

Daher wäre meine Aufforderung an Dich: Sorge für eine Umgebung, bei der Du mit dem Code spielen kannst um diesen dann zu übersetzen und auszuführen. Und dann mach es! Du musst Erfahrungen sammeln und das geht nur mit den Fingern an der Tastatur und direktem ausprobieren! Nur die theoretische Ausführung von Aufgaben wird Dir nicht wirklich das notwendige Wissen vermitteln.
Alles klar, danke für die ausführliche Erklärung. Ja, ich arbeite mit IntelliJ damit habe ich eine Testmöglichkeit, jedoch ist es für mich bedingt hilfreich, da wir mit der Entschlüsselung von Fehlermeldungen noch gar nicht gearbeitet haben. Das eigne ich mir quasi nebenher an. Klar, ich würde gerne "etwas spielen", aber neben Präsenzveranstaltungen und einem Abgabevolumen von je vier pro Woche, in denen dann jeweils zwei Vorlesungen inhaltlich verarbeitetet werden müssen, kann Theorie und Praxis nur parallel verarbeitet werden. Pandemiebedingt sind auch die Netzwerke ziemlich mau. Anders als in Mathe wird seitens der TechFak für Info kein Lernzentrum für einen Austausch angeboten. Deswegen nutze ich ja solche Foren, denn seitens der TechFak wird "Wissensvermittlung" vor Wissensverwendung bzw. -anwendung priorisiert. Meines Erachtens ist dies unproduktiv, aber so ist es eben. So, nach der Leidklage werde ich mich der Aufgabe widmen.
 
Ob es klappt oder nicht, kannst du ganz einfach herausfinden, in dem du es probierst. Diese Möglichkeit habe ich leider nicht.

Was mir aber auffällt ist, dass die Methode den falsche Namen trägt und deiner Methode scheinen, im Gegensatz zur vorgegeben printWords(), Satzzeichen/Zahlen egal zu sein.
Ja, danke. Da sprichst Du ein wesentliches Problem an, was ich habe (Satzzeichen/ Zahlen). Die beiden Testtexte beinhalten keine Ziffern oder Zahlen, demnach habe ich diese ausgeschlossen. Aber mir war nicht klar, dass ich damit auch die Satzzeichen ausschliesse. Wenn ich alles (Satzzeichen, Ziffer, Zahlen) berücksichtigen möchte, dann sollte StreamTokenizer hilfreich sein, oder?
 
Also wenn Du den Code ausprobiert hast und Fehlermeldungen bekommen hast, dann würde es Sinn machen, diese Fehlermeldungen anzugeben. Die Frage, ob es so klappt, würde so entfallen, denn die Antwort hättest Du schon.

Du bist aber auf die Beschreibung, wieso es so nicht gehen kann, nicht eingegangen. Das finde ich etwas schade, denn so kommen wir nicht wirklich weiter.

Und vor allem: in #3 hast Du doch bereits Code Referenzen gezeigt, die verwendet werden können. Hast Du den Code verstanden? Was machen die Zwei Methoden im Detail?

Nimm Dir die erste Methode: Was muss gerändert werden? Dann ist das vorgehen doch ganz einfach:
1) Methode kopieren
2) Name der Methode anpassen
3) Wo ist Funktionalität, die geändert werden muss? Das ist doch nur eine Zeile Code! statt add auf die Zeile aufzurufen musst Du die Wörter der Zeile hinzu fügen. Also statt addWord(line) ein addWords(line). Es soll die Zeile also nicht als ein Wort sondern die Worte der Zeile sollen eingefügt werden ...

Jetzt fehlt die addWords Methode ... Aber Du hast einen Hinweis auf eine printWords Methode. Da kannst Du also auch ebenso vorgehen:
1) Methode kopieren
2) Name der Methode anpassen
3) die Funktionalität, die geändert werden muss, identifizieren und ändern.

In #3 hast Du einen Code gebracht, der übrigens fast den Anfang hatte, wie gegeben. Du hast die Methode kopiert und den Namen der Methode angepasst. Aber dann hast Du als einzige Änderung aus "String line = ..." ein "String text = ..." gemacht, also die Variable, die deklariert wurde, angepasst. Damit gibt es keine Variable line mehr ... Die verwendest Du aber weiterhin im add Aufruf ...

Aber damit hast Du jetzt schon fast die ganze Lösung vorgegeben bekommen. (Wobei der große Teil der Lösung bereits vorgegeben war!) Und das ist keine große Transferleistung! Ich weiss derzeit nicht, was Du gemacht hast um auf die Lösungsidee in #5 zu kommen. Ich vermute, dass dies ein ein Zeichen für ein (sehr großes) Defizit an Grundlagen ist. Das kann ich aber nicht bewerten, da ich Dich nicht gut genug kenne, aber es erklärt die klare Aussage von mir, dass hier gewisse Dinge nachgeholt werden müssen und dass ich versuche, Wege aufzuzeigen, wie dies gehen könnte.
Und Fehlermeldungen besagen doch in der Regel gut verständlich, was das Problem ist und wenn Du damit Probleme hast: Das wäre doch auch eine super Frage fürs Forum. Da würde es dann garantiert erläutert.

Was Dir aber nicht wirklich weiter helfen wird, ist das Vorgeben der Lösung. Damit hast Du kein Wissensgewinn. Nur darauf ist es jetzt fast hinaus gelaufen. Und das ist nicht ein Thema, das jetzt abgehakt ist und macht jetzt ganz andere Themen. Es geht hier um Grundlagen. Diese musst Du beherrschen. Ohne das, wirst Du die Dinge, die jetzt garantiert noch folgen werden, nicht verstehen bzw. bearbeiten können.
 
>Sollte es so klappen?
Das dürfte noch nicht mal kompilieren, weil "var" nicht existiert (zumindest nicht im gezeigten Ausschnitt). Außerdem heißt es aufpassen: "var" ist seit Java 10 ein Schlüsselwort.

Dann wären da noch die Erläuterungen von @KonradN. Den Bug zu beheben, ist keine große Sache, da kommst Du mit ein klein wenig Überlegung selbst drauf.

Die Zeile words = null, kannst Du Dir sparen, der Speicher wird sowieso freigegeben.
 
Danke KonradN und mihe7 für eure Feedbacks. Grundsätzlich, klar fehlen mir da gewisse Grundlagen, denn das Selbsterlernen des Programms kann nicht mit dem Tempo der Vorlesung mithalten, so dass sich kein lückenloses Fundament sofort aufbauen lässt. Das muss irgendwie parallel laufen. Also hier erneut die Aufgabestellung:

Wort-Histogramm-Beispiel erweitern


In dieser Aufgabe sollen Sie zwei Erweiterungen an dem in der Vorlesung vorgestellten Programm WordHistogramSample.java vornehmen.


a) Erweitern Sie die Klasse WordHistogramSample um eine Methode


static void readText (String filename) {...}


die eine normale Textdatei liest und die in jeder Zeile enthaltenen Worte in das Wort-Histogramm einfügt. Eine geeignete Vorgehensweise, um den Text einer Zeile zu zerlegen, finden Sie auf Folie OPJ-4.7 im Kapitel "Strings".


Testen Sie Ihre neue Methode readText mit den beiden Beispielsdateien däumling.txt und entlein.txt (zwei Märchentexte aus dem Projekt Gutenberg http://www.gutenberg.org/wiki/DE_Hauptseite).


b) Ergänzen Sie zu den vorhandenen Methoden addWord und removeWord jeweils eine überladene Methode, die als zweiten Parameter eine int-Zahl n erwartet. Dabei gibt n an, wie viele Auftreten des Worts in das Histogramm eingetragen bzw. daraus entfernt werden sollen. addWord("und", 7) entspricht also sieben Aufrufen von addWord("und").


Vorgehensweise: Bauen Sie die beiden vorhandenen Methoden in die erweiterte Form mit dem zusätzlichen Parameter um. Benutzen Sie dann das Schema auf Folie EIP-8.16 im Kapitel "Methoden", um wieder Varianten von addWord und removeWord mit nur einem Parameter zu implementieren.


Achten Sie darauf, dass die neuen Methoden Aufrufe wie wie:


addWord("exotisch", 0);


addWord("Antimaterie", -3);


removeWord("äh", -99);


removeWord("nix", 0);


korrekt behandeln.

Die entsprechenden VL-Referenz kann ich dann auch gerne erneut hier einstellen. Auf jeden Fall, so sah mein Code aus:



Java:
class WordEntry {
    String word;
    int frequency;
}

public class WordHistogramSample {
    static WordEntry[] entries;
    static int entryCount;

    static void addWord (String word) {
        int i = 0;
        while (i < entryCount && !word.equals(entries[i].word)) i++;
        if (i >= entryCount) {
            if (entryCount >= entries.length) Out.println("Zu viele Einträge.");
            else {
                WordEntry we = new WordEntry();
                we.word = word;
                we.frequency = 1;
                entries[entryCount] = we;
                entryCount++;
            }
        } else
            entries[i].frequency += 1;
    }

        static void addWord (String word) {
            int i = n;
            while (i < entryCount && !word.equals(entries[i].word)) n++;
            if (n >= entryCount) {
                if (entryCount >= entries.length) Out.println("Zu viele Einträge.");
                else {
                    WordEntry we = new WordEntry();
                    we.word = word;
                    we.frequency = 1;
                    entries[entryCount] = we;
                    entryCount++;
                }
            }
            else
                entries[i].frequency += 1;
    }

    static void removeWord (String word) {
        int i = 0;
        while (i < entryCount && !word.equals(entries[i].word)) i++;
        if (i < entryCount) {
            entries[i].frequency -= 1;
            if (entries[i].frequency <= 0) {
                entries[i] = entries[entryCount - 1];
                entryCount -= 1;
                entries[entryCount] = null;  // required by class invariant and improves garbage collection
            }
            {static void removeWord (String word) {
                int i = n;
                while (n < entryCount && !word.equals(entries[n].word)) n++;
                if (n < entryCount) {
                    entries[i].frequency -= 1;
                    if (entries[i].frequency <= 0) {
                        entries[i] = entries[entryCount - 1];
                        entryCount -= 1;
                        entries[entryCount] = null;  // required by class invariant and improves garbage collection
        }
    }

    static void printEntries () {
        Out.println("Anzahl Einträge: " + entryCount);
        for (int i = 0; i < entryCount; i++) {
            WordEntry we = entries[i];
            Out.println("#" + (i+1) + " " + we.word + ": " + we.frequency);
        }
    }

    static void readWordList (String filename) {
        In.open(filename);
        if (!In.done()) {
            Out.println("Datei nicht gefunden.");
            return;
        }
        String line = In.readLine();
        while (In.done()) {
            addWord(line);
            line = In.readLine();
        }
        In.close();
    }
}

    static void readText (String filename) {
        In.open(filename);
        if (!In.done()) {
            Out.println("Datei nicht gefunden.");
            return;
        }
        String text = In.readText();
        while (In.done()) {
            addText(text);
            text = In.readText();
        }
        In.close();

        static void printWords (String text) {
            int i = 0, last = text.length() - 1;
            while (i <= last) {
                while (i <= last && !Character.isLetter(text.charAt(i))) i++;
                // end of text or text[i] is a letter
                int beg = i;
                while (i <= last && Character.isLetter(text.charAt(i))) i++;
                // end of text or text[i] is not a letter
                if (i > beg) Out.println(text.substring(beg, i));
            }
        }

    }

    public static void main (String[] args) {
        entries = new WordEntry[1000];
        entryCount = 0;
        readWordList("words.txt");
        printEntries();
    }
}

Hier die Bewertung:


- keine Behandlung von den geforderten negativen/null Eingaben der removeWord(String, int) Methode (-1P)
- die addWord(String, int) Methode ist nicht implementiert (-1P)
- die removeWord(String, int) Methode ist nicht implementiert (-1P)
- das aufteilen der Wörter und anschließend dem Word Histogramm hinzuzufügen ist nicht vollständig implementiert (-1,5P)
- deine readText Methode ruft die readText Methode der In Klasse auf (Zeilen 94 und 97), welche nicht existiert
- die Methode addWord, die du in Zeile 96 aufrufst, ist nicht implementiert
- die schließende geschweifte Klammer für die Methode removeWord in Zeile 43 fehlt bzw ist nicht wie die Einrückung vermuten lässt in Zeile 56, hierdurch hast du in bei diesem Code Teil eine nicht gleiche Anzahl an öffnende und schließende Klammern
- die Methode removeWord in Zeile 53 ist hier nicht möglich zu definieren, da du noch im Kontext der anderen removeWord Methode bist
- die geschweifte Klammer aus Zeile 86 die schließende Klammer für die gesamte Klasse und damit falsch, da du bereits eine in Zeile 121 hast
- die Methode printWords aus Zeile 101 kann nicht innerhalb einer anderen Methode so definiert werden


Also die Syntax-Fehler sind klar. Aber bestimmte Sachen aus der Korrektur sind mir unklar:
1. Liegt die hohe Anzahl an fehlender Implementierung an den Syntaxfehlern?
2. Wie behandle ich Null-Werte? Meine Idee eine for-while-Schleife.
3. "deine readText Methode ruft die readText Methode der In Klasse auf (Zeilen 94 und 97), welche nicht existiert" -> Was existiert hier nicht?
4. " die Methode removeWord in Zeile 53 ist hier nicht möglich zu definieren, da du noch im Kontext der anderen removeWord Methode bist" -> Wieso bin ich das? Ich habe geg. Methode einfach nur modelliert und nicht den "Platz" verändert.

Wer sich da erst durcharbeitet danke, aber ansonsten Kritik und Korrektur wie immer willkommen.

BG Viktor
 
Grundsätzlich, klar fehlen mir da gewisse Grundlagen, denn das Selbsterlernen des Programms kann nicht mit dem Tempo der Vorlesung mithalten, so dass sich kein lückenloses Fundament sofort aufbauen lässt. Das muss irgendwie parallel laufen.
Damit haben wir ein gemeinsames Verständnis und da helfen wir dann auch sehr gerne. (Sorry, wenn ich vorher den Eindruck hatte, dass du hier ggf. diesen Weg noch nicht einschlagen wolltest. Aber auf diesem Weg sind wir zu vielen "Schandtaten" bereit.)

Ein wichtiger Punkt aus meiner Sicht ist, dass Du Dir gute Unterstützung holen solltest in Form eine Entwicklungsumgebung. Diese macht einige Dinge, wie:
- Automatisches Einrücken / Formatieren des Codes. Dies hilft Dir direkt, Blöcke gut zu erkennen.
- Direktes Anzeigen von Fehlern und möglichen Problemen. Das hilft, direkt Fehler zu vermeiden.
- Unterstützung bei der Eingabe von Code durch z.B. Anzeige von zur Verfügung stehenden Methoden und so, einbinden von Klassen und all sowas. (Autovervollständigung)

Meine Empfehlung wäre IntelliJ (Community Edition), alleine schon, weil das meine Lieblings IDE ist. Netbeans ist wohl auch gut für Anfänger geeignet (@mrBrown oder @mihe7 nutzen z.B. Netbeans. Ich erinnere mich gerade nicht genau). Eclipse halte ich für eher ungeeignet für Anfänger aber würde auch gehen.

Wenn Du Dich für eine IDE entschieden hast, dann kannst Du uns das sagen - dann würden wir ggf. immer wieder Hinweise zur Bedienung einfließen lassen, so dass Du schneller voran kommen kannst.

Zu Deinen Fragestellungen:
1. Vermutlich nicht. Das liegt einfach daran, dass Du diese Methoden nicht implementiert hast. Ich habe jetzt aber Deinen Code nicht zu genau untersucht, so dass ich da ggf. etwas übersehen habe.
2. null Werte werden in der Regel per if abgefragt um dann die notwendige Behandlung durchzuführen.
3. Könntest Du uns hier ggf. Details zukommen lassen? Die In Klasse dürfte euch von der Uni gegeben worden sein und damit kennen wir diese derzeit nicht.
4. In Zeile 43 startet die Methode removeWord(String) und die ist erst zu Ende, wenn die Anzahl der { gleich der Anzahl der } ist. In Zeile 53 hast Du noch 2 geöffnete geschweifte Klammern der Methode removeWord(String). Dazu hast Du da noch eine geöffnete Klammer auf der Zeile, die da natürlich auch nicht gehören kann.

Ich habe gerade leider nicht mehr Zeit, aber ich werde später noch ausführlicher auf die einzelnen Punkte eingehen (so mir da niemand anderes zuvor kommen sollte).
 

Zurück
Oben