Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe die Aufgabe ein Programm zu erstellen, das aus einer Textdatei "test.txt" Zeichen ausliest.
Zum Speichern der Zeichen verwende ich eine Hashtable.
Je nachdem wie oft ein Zeichen in der Textdatei vorkommt also z.B.: a, b, c,... sollte ein Sternchen ausgegeben werden.
Beispiel:
a ***
b ********
c **
Mein Problem ist nun, dass ich statt den Sternchen nur die Ausgabe "null*" bekomme oder ein Zeichen wird nicht mal ausgegeben, obwohl es in der Datei vorhanden ist.
c: *
b: null*
a: null*
Ich programmiere erst seit wenigen Wochen und tu mir leider noch ziemlich schwer. Ich hoffe jemand kann mir helfen diesen Fehler zu finden und auszubessern, da ich morgen schon das Programm fertig haben muss. Wäre euch sehr dankbar! :bahnhof:
Hier mein Code:
Java:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
public class Anzahl {
Hashtable<Character,String> hm = new Hashtable<Character,String>();
FileReader fr;
int c;
public Anzahl() {
try {
fr = new FileReader("test.txt");
leseDaten();
gebeDatenAus();
} catch (IOException e) {
System.out.println("Fehler beim Auslesen der Datei");
}
}
public void leseDaten() throws IOException {
String counter = "";
while((c = fr.read()) != -1){
if(hm.containsKey((char)c)){
counter = (hm.get(c))+"*";
hm.put(new Character((char) c),counter);
}else hm.put(new Character((char) c),"*");
}
fr.close();
}
private void gebeDatenAus() {
Enumeration e = hm.keys();
while(e.hasMoreElements()) {
Object zeichen = e.nextElement();
System.out.println(zeichen + ":\t" + hm.get(zeichen));
}
}
public static void main(String[] args) {
new CharCounter();
}
}
Mach am besten mal nicht mit Hashtable, sondern eher mit was einfacherem, wie einem String[27]
Da legst du einfach für jeden Buchstaben einen String im Feld an (zum Zugriff etc. einfach mal im Forum suchen).
Dann vergleichst du das eingelesene mithilfe einer Schleife mit einem statischen String[] (in welchem einfah steht: {"a","b",...} und sagst dann einfach:
Code:
gelesen[i] += "*";
Kürzer und einfacher als Hashtable
Gruß eMmiE
P.S.: Mit Hastable hab ich bis jetzt noch nicht so gearbeitet