Moin Leuts.
Ich habe hier eine Aufgabe welche ich leider nicht zum laufen bekommen.
Folgendes. Die Aufgabe habe ich letztes Semester schon einmal gepostet, da ich das Fach aber nochmal belegt habe, darf ich auf die Aufgabe nochmal machen. Allerdings ist sie diesmal etwas abgeändert indem uns eine Testklasse zur verfügung gestellt wurde.
Nun möchte ich die "alten" Klasse mit der neuen Testklasse zusammenführen. Sobald das Ding läuft werde ich mich dranmachen es zu vereinfachen. Nur es läuft bisher leider nicht.
Hier erstmal der Code:
Testklasse. Diese schickt ihren Text an WordCounter zur Verarbeitung
WordCounter. Zählt die Wörter und baut eine Tabelle mit Wörtern auf -> WordTable
WordTable. speichert die Elemente in einer Liste. Tabellengröße passt sich automatisch an.
WordElement. Wort mit Häufigkeit
So. Das war ertmal der Code.
Wie bekomme ich das nun zusammen?
schrobi
Ich habe hier eine Aufgabe welche ich leider nicht zum laufen bekommen.
Folgendes. Die Aufgabe habe ich letztes Semester schon einmal gepostet, da ich das Fach aber nochmal belegt habe, darf ich auf die Aufgabe nochmal machen. Allerdings ist sie diesmal etwas abgeändert indem uns eine Testklasse zur verfügung gestellt wurde.
Nun möchte ich die "alten" Klasse mit der neuen Testklasse zusammenführen. Sobald das Ding läuft werde ich mich dranmachen es zu vereinfachen. Nur es läuft bisher leider nicht.
Hier erstmal der Code:
Testklasse. Diese schickt ihren Text an WordCounter zur Verarbeitung
Java:
public class WordCounterTester {
/**
* Tests the classes.
*
* @param args the command line argument strings passed supplied by the OS.
* The String to be analyzed should be passed as the first argument (args[0])
*
*/
public static void main(String[] args) {
WordCounter counter;
WordTable table;
WordElement element;
if (args.length != 1) { // not exactly an argument?
System.out.println("usage: WordCountTester <string>"); // show correct message!
} else {
counter = new WordCounter(args[0]); // create a WordCounter with the argument
table = counter.getTable(); // retrieve the table from the counter
for (int i = 0; i < table.size(); i++) { // loop over all elements in the table
/* getElement() "throws" an "IndexOutOfBoundsException" for an invalid index! */
element = table.getElement(i); // get the next element
System.out.println(element.getWord() + ": " + element.getCount()); // show info
}
}
}
}
WordCounter. Zählt die Wörter und baut eine Tabelle mit Wörtern auf -> WordTable
Java:
public class WordCounter {
private String originalText;
private WordTable wordTable;
/**Methode welche die Worte in ein Array uebergibt.*/
public WordCounter(String text) {
this.originalText = text;
String[] words = originalText.split("\\W+");
/*
* words.length stellt sicher, dass die WordTable
* auf jedenfall gross genug initialisiert wird.
*/
wordTable = new WordTable(words.length);
for (String word : words) {
wordTable.addWord(word);
}
}
public int countWords() {
return wordTable.getDifferentWordsCnt();
}
public void printTable() {
wordTable.printTable();
}
}
WordTable. speichert die Elemente in einer Liste. Tabellengröße passt sich automatisch an.
Java:
public class WordTable {//speichert instanzen der klasse wordElement!
private WordElement[] elements;
private int nextEmptyArrayPosition;
public WordTable(int maxSize) {
elements = new WordElement[maxSize];
}
public int getDifferentWordsCnt() {
return nextEmptyArrayPosition;
}
public void printTable() {
for (WordElement element : elements) {
if (element == null) {
break;
}
System.out.println(element);
}
}
public void addWord(String word) {
int index = getIndex(word);
if (index == -1) {
newWord(word);
} else {
elements[index].setCount(elements[index].getCount() + 1);
}
}
private void newWord(String word) {
try {
elements[nextEmptyArrayPosition++] = new WordElement(1, word);
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
System.out.println("Die WordTable ist nicht gross genug.");
}
}
private int getIndex(String word) {
for (int i = 0; i < nextEmptyArrayPosition; ++i) {
if (elements[i].getWord().equals(word)) {
return i;
}
}
return -1; // elements enthaelt das gesuchte Word noch nicht
}
}
WordElement. Wort mit Häufigkeit
Java:
public class WordElement {
private String word;
private int count;
public WordElement(String word) {
this.word = word;
count = 1; // initialize with 1 at creation
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public int getCount() {
return count;
}
public void setCount(int cnt) {
this.count = count;
}
public String toString() {
return count + " x " + word;
}
}
So. Das war ertmal der Code.
Wie bekomme ich das nun zusammen?
schrobi