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();
    }
}
 

mihe7

Top Contributor
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".
 

viktor1

Mitglied
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
 

shokwave

Mitglied
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
 

viktor1

Mitglied
>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")
    }
  }
 

KonradN

Super-Moderator
Mitarbeiter
>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.
 

shokwave

Mitglied
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.
 

viktor1

Mitglied
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.
 

viktor1

Mitglied
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?
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

mihe7

Top Contributor
>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.
 

viktor1

Mitglied
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
 

KonradN

Super-Moderator
Mitarbeiter
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).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
T Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Java Basics - Anfänger-Themen 6
J Methode zur Ausgabe eines Dreiecks aus Sternen schreiben? Java Basics - Anfänger-Themen 2
J Methode selber schreiben Java Basics - Anfänger-Themen 5
O findRoot Methode schreiben in einem Intervall Java Basics - Anfänger-Themen 31
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
D Datentypen StringToFloat-Methode schreiben Java Basics - Anfänger-Themen 0
L Methode schreiben die den maximalen Wert im Array ermittelt Java Basics - Anfänger-Themen 27
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Thread - Methoden in die run Methode Schreiben Java Basics - Anfänger-Themen 5
H Array Test Methode schreiben Java Basics - Anfänger-Themen 3
T Probleme eine Methode zu schreiben Java Basics - Anfänger-Themen 20
S neue Methode schreiben Java Basics - Anfänger-Themen 14
E Methoden Wie kann ich eine Methode so schreiben, dass Methodenaufruf polymorph erfolgen kann? Java Basics - Anfänger-Themen 8
C Methoden Methode istDurchZahlTeilbar schreiben Java Basics - Anfänger-Themen 38
F Klassen DataBuffer - Methode um Array in eine Bank zu schreiben Java Basics - Anfänger-Themen 3
W Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.? Java Basics - Anfänger-Themen 3
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
L ArrayList über Methode in Datei schreiben Java Basics - Anfänger-Themen 13
JavaKaffee Taschenrechner, Methode schreiben? Java Basics - Anfänger-Themen 6
K Eine Neue Methode Schreiben . Java Basics - Anfänger-Themen 15
A Klassen: Ein Testprogramm mit der main Methode schreiben? Java Basics - Anfänger-Themen 3
M Wie diese Methode schreiben? Java Basics - Anfänger-Themen 8
F Methode double [ ][ ] sum3D(double[ ][ ][ ] cubic) schreiben Java Basics - Anfänger-Themen 4
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
M generate Methode für Streams Java Basics - Anfänger-Themen 6
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
I Optionaler Parameter bei Methode, der nur optional ist? Java Basics - Anfänger-Themen 6
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
T Linked List set-Methode Java Basics - Anfänger-Themen 2
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
V Methoden printChar Methode mit Rückgabetyp void Java Basics - Anfänger-Themen 26
F Graph Tiefensuche Methode Java Basics - Anfänger-Themen 7
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
S Methode Java Basics - Anfänger-Themen 4
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
Liroyd Methode mit Objektvariabel rechnen? Java Basics - Anfänger-Themen 6
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
D Methode um mögliche Rezepte auszugeben Java Basics - Anfänger-Themen 12
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben