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.
Also ich denke ohne wenigstens mal zu erklären um was es geht wirst du schlechte Aussichten haben, ansonsten gilt fast immer der Grundsatz: Wir machen keine Hausaufgaben.
Wir helfen bei sichtbarer Eigeninitiative gerne bei Problemen weiter aber komplette Aufgaben lösen wird dir hier keiner.
Frage:
Aus einer Textdatei werden Wörter eingelesen. Sie sind durch mindestens
ein Leerzeichen, Trennzeichen oder Zeilenumbrüche getrennt.
Beispiel:
Das ist ein Beispiel für
einen Text wie er in einer
Textdatei stehen könnte.
Erstelle für die eingelesenen Wörter Statistiken. Diese soll folgende Kennzahlen ausgeben
und sie in separaten Methoden, angewendet auf alle eingelesenen Wörter, berechnen:
Anzahl der Wörter
Anzahl aller Zeichen
Mittelwert der Wortlängen
Minimum und Maximum der Wortlängen
Standardabweichung und Varianz der Wortlängen
eine Liste der 10 häufigsten Wörter,
eine Liste der 10 häufigsten Wörter für jede vorkommende Wortlänge (also eine
separate Zählung für jede Länge),
Pass auf, dass das Programm nicht über Sonderzeichen stolpert. Verwende Sortiermethoden
der Java API, sinnvolle Datentypen und achte auf effizienten Code. Dokumentiere
jede Methode passend für “javadoc”.
Hinweis: Für das Einlesen wird die Klasse java.util.Scanner, und für die Statistiken
die Klasse java.util.HashMap oder eine Matrix nützlich sein!
Also ich denke ohne wenigstens mal zu erklären um was es geht wirst du schlechte Aussichten haben, ansonsten gilt fast immer der Grundsatz: Wir machen keine Hausaufgaben.
Wir helfen bei sichtbarer Eigeninitiative gerne bei Problemen weiter aber komplette Aufgaben lösen wird dir hier keiner.
@noctarius:
ich bin anfänger und wollte ich nur Hilfe.ist das Peinlich?
Wenn man will kann man helfen,wenn nicht kein Problem denke ich.Wir können unsere Kenntnisse teilen denke ich
Von peinlich hab ich nichts gesagt, aber auch als Anfänger sollte man sich Gedanken machen was und wie man postet. Besonders wenn man Hilfe haben will.
PS: Der Titel ist immer noch nicht besser. Ein Titel sollte eine Kurzzusammenfassung des Problems darstellen. ich hab dem Ganzen mal einen sinnvolleren Titel verpasst, weil so wird das sicher später niemandem mehr weiterhelfen, denn nach "meine aufgabe" wird keiner bei Google suchen.
Von der Aufgabe nicht einschüchtern lassen, und immer schön schrittweise vorgehen:
- Wie liest man eine Textdatei ein? Da finden sich x Beispiele im Forum...
- Wie zerlegt man einen String in einzelne Wörter? String.split oder StringTokenizer können weiterhelfen
- Wörter zählen ist nicht schwierig...
- Für die Wortlängen kann man z.B. eine HashMap<Integer, Integer> nehmen, und zwar von Wortlänge -> Anzahl Vorkommen
...
Von der Aufgabe nicht einschüchtern lassen, und immer schön schrittweise vorgehen:
- Wie liest man eine Textdatei ein? Da finden sich x Beispiele im Forum...
- Wie zerlegt man einen String in einzelne Wörter? String.split oder StringTokenizer können weiterhelfen
- Wörter zählen ist nicht schwierig...
- Für die Wortlängen kann man z.B. eine HashMap<Integer, Integer> nehmen, und zwar von Wortlänge -> Anzahl Vorkommen
...
Willst du uns etwa ver...? Wie gesagt, erst selbst einen Ansatz posten und eine spezielle Frage stellen, wenn dir etwas nicht ganz klar ist!
mfg
Eldorado
Willst du uns etwa ver...? Wie gesagt, erst selbst einen Ansatz posten und eine spezielle Frage stellen, wenn dir etwas nicht ganz klar ist!
mfg
Eldorado
ich hasse die Leute,die geizig sind.Ich bin noch 15 und wollte ich nur Hilfe für Meine schulübung.
Wenn jemand will,kann das in 5 min schreiben aber es gibt nicht genug solche leute glaube ich..
Und wir mögen dreiste Leute nicht, die denken die User des Java-Forums sind nur dazu da um ihre Hausaufgaben zu machen. Und ja es gibt hier genug Leute die das in 5 min machen könnten, wobei ich hoffe das es keinen tun wird.
Helfen heißt nicht machen.
Also, entweder
- du kannst ein bisschen was, fängst an und wir helfen dir wenn du nicht weiter kommst
oder
- du kannst nichts, dann wir können dir auch nicht helfen außer mit Empfehlungen zu Tutorials und Büchern.
Frage:
Aus einer Textdatei werden Wörter eingelesen. Sie sind durch mindestens
ein Leerzeichen, Trennzeichen oder Zeilenumbrüche getrennt.
Beispiel:
Das ist ein Beispiel für
einen Text wie er in einer
Textdatei stehen könnte.
Erstelle für die eingelesenen Wörter Statistiken. Diese soll folgende Kennzahlen ausgeben
und sie in separaten Methoden, angewendet auf alle eingelesenen Wörter, berechnen:
ˆ Anzahl der Wörter
ˆ Anzahl aller Zeichen
ˆ Mittelwert der Wortlängen
ˆ Minimum und Maximum der Wortlängen
ˆ Standardabweichung und Varianz der Wortlängen
ˆ eine Liste der 10 häufigsten Wörter,
ˆ eine Liste der 10 häufigsten Wörter für jede vorkommende Wortlänge (also eine
separate Zählung für jede Länge),
Pass auf, dass das Programm nicht über Sonderzeichen stolpert. Verwende Sortiermethoden
der Java API, sinnvolle Datentypen und achte auf effizienten Code. Dokumentiere
jede Methode passend für “javadoc”.
Hinweis: Für das Einlesen wird die Klasse java.util.Scanner, und für die Statistiken
die Klasse java.util.HashMap oder eine Matrix nützlich sein!
Wenn ich diese Aufgabe so lesen, dann sehe ich, dass es keine Aufgabe ist, die mal als erstes aufgibt. Ich schätze hier hat jemand seine Hausaufgaben bisher auch nicht selber gemacht, und kommt nun nicht zurecht.
Ich werde dir helfen, wenn du anfängst hier Code zu posten, einen Ansatz, deine Ideen. Stell konkrete Fragen, und hier wirst du schnell Hilfe finden. (Suchfunktion mal versuchen )
Ich geb dir mal noch einen Tipp: Wenn etwas zu schwierig erscheint, kann man diesen Schritt erst mal überspringen. Wenn du dir z.B. das Einlesen der Datei erst mal sparen möchstest, kannst du so anfangen:
Java:
import java.util.*;
class Words {
public static void main(String[] args) {
List<String> lines = new ArrayList<String>();
//das sollte eigentlich aus einer Textdatei kommen:
lines.add("bla bla bla laber sülz");
lines.add(" \t ");
lines add(" Das Leben ist kein Ponyhof ");
lines.add("");
lines.add("*seufz*");
lines.add("Wie ekel, schal und unersprießlich dünkt mich das Treiben dieser Welt!");
//weiter im text
List<String> words = new ArrayList<String>();
//und jetzt fülle das mit String.split oder StringTokenizer...
}
}
haha voll lustig, ich habe 1 zu 1 die selbe Angabe auch bekommen. Eine Freundin von mir Studiert Mathematik an der Uni in Wien und hat mich gebeten ihr mit diesem Beispiel zu helfen, da sie in Programmieren nicht die beste ist
Grundsätzlich mal mein Ansatz:
Ich gehe die Datei zeichenweise bis zum EOF(End of File) durch. Dann habe ich eine boolsche Variable inWort. Wenn ein Buchstabe kommt wird diese Variable true und ich speichere mir das Zeichen in einen StringBuffer. Wenn dann ein \n \t oder ' ' kommt bin ich nicht mehr in einem Wort, ich speichere mir den Inhalt des StringBuffers in eine HashMap (bzw wenn das Wort schon in der HashMap ist erhöhe ich den Value um 1) und lege einen neuen StringBuffer an. Gleichzeitig bei diesen durchläufen speichere ich mir min, max und durchschnittswortlänge.
Nun habe ich aber große Probleme die Wortliste der 10 häufigsten Worte zu erstellen.
Ich hab mir überlegt die HashMap in einer foreach durchzugehen und dann die Worte in ein 10 Stellen großes String Array zu speichern.
Aber irgendwie hat das nicht ganz so geklappt wie ich mir das vorstelle
Hat irgendjemand eine gute Idee wie man das lösen könnte? Bzw. ist mein Ansatz überhaupt denkbar?
@Sycord:
Du gehst von Hand Zeichen für Zeichen durch? Verwende Regex ([c]String.split()[/c]) o.ä. ...
Wenn man eine [c]Map<String, Integer>[/c] für den Wert (Wort) und die Anzahl Vorkommnisse hat, kann man das doch einfach in [c]Map<Integer, List<String>>[/c] konvertieren, wobei Integer die Anzahl Vorkommnisse sind. Sortiert kann man die ersten 10 ganz einfach auslesen.
Nun habe ich aber große Probleme die Wortliste der 10 häufigsten Worte zu erstellen.
Ich hab mir überlegt die HashMap in einer foreach durchzugehen und dann die Worte in ein 10 Stellen großes String Array zu speichern.
Aber irgendwie hat das nicht ganz so geklappt wie ich mir das vorstelle
Hat irgendjemand eine gute Idee wie man das lösen könnte? Bzw. ist mein Ansatz überhaupt denkbar?
class WordCount implements Comparable<WordCount>{
final int count;
final String word;
public WordCount(String word, int count) {
this.word = word;
this.count = count;
}
public int compareTo(WordCount wc) {
if(count == wc.count) return wc.word.compareTo(word)
else return wc.count - count;
}
}
...
Map<String, Integer> countMap = HashMap<String, Integer>();
for(String word : wordList) {
if (countMap.containsKey(word)) {
countMap.put(word, countMap.get(word) + 1);
} else {
countMap.put(word, 1);
}
}
Set<WordCount> frequency = new TreeSet<WordCount>(); //TreeSet ist geordnet
for(Map.Entry<Strint, Integer> entry : countMap.entrySet()) {
frequency.add(new WordCount(entry.getKey(), entry.getValue());
}
//die zehn häufigsten stehen am Anfang von frequency
Ich würde einfach das File zeilenweise also ArrayListe mit Strings einlesen und dann für jeden Statistik wert eine eigene Methode schreiben die die Liste als Argument hat...
Wenn man Anfänger ist, sieht man oft den Wald vor lauter Bäume nicht und man weiß nicht wie man ansetzen soll, da kann ein Anfang schon sehr hilfreich sein...
also ein Anfang könnte mal so aussehen:
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
Test tester = new Test();
ArrayList<String> lines = tester.getFileAsList(new File("c://test.txt"));
System.out.println("Zeichen: "+tester.countCharacters(lines));
System.out.println("Wörter: "+tester.countWords(lines));
}
public ArrayList<String> getFileAsList(File f){
ArrayList<String> result = new ArrayList<String>();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(f));
String line;
while((line=reader.readLine())!=null){
result.add(line);
}
} catch (Exception e) {
//Logging
e.printStackTrace();
}finally{
if(reader!=null){
try {reader.close(); } catch (IOException e1) {}
}
}
return result;
}
// Anzahl aller Zeichen
public int countCharacters(ArrayList<String> lines){
int result = 0;
for(String line: lines){
result += line.length();
}
result+=lines.size()-1; //die Zeilenumbrüche noch dazu.
return result;
}
//Anzahl aller Wörter
public int countWords(ArrayList<String> lines){
int result = 0;
for(String line: lines){
result += line.split(" ").length;
}
return result;
}
}
Der Nachteil bei einem fremden Anfang ist halt, dass dies der einfach Teil war und jetzt kommen die schweren sachen die du mit einem fremden Rahmen lösen musst... aber das ist eine andere geschichte...
@ARadauer: Zeichenweise habe ich deswegen lieber, weil ich es so leichter finde die Anzahl der Zeichen zu finden.
Hab grad in der Schule einen Klassenkollegen um Hilfe gebeten und wir haben das ganze so gelöst:
Anstatt der Hashmap verwende ich jetzt eine ArrayList, die ich mithilfe Collections.sort leicht sortieren kann. Dann muss ich einfach nur noch die ersten zehn der ArrayList ausgeben.
Für die Liste der 10 häufigsten Wörter für jede vorkommende Wortlänge habe ich einen Comperator geschrieben, der nach Wortlänge und dann nach Anzahl sortiert.
[Java] public int compare(Wort word1, Wort word2) {
int cmp = word1.getWort().length()-word2.getWort().length();
if (cmp==0) {
cmp = word2.getAnz()-word1.getAnz();
}
return cmp;
}[/Java]
Und dann verwend ich bei der Ausgabe halt einen einfachen Gruppenwechsel, sortiert sind sie ja schon durch den Comperator
sorry, ich hätte ne' frage, unswar habe ich heute mittag gelesen, dass jemand 534 buchstaben in einem wort hatte, das mit*eineurojobber* anfängt.
Weiter weis ich leider nicht mehr und den namen der person habe ich mir leider auch nicht gemerkt!
Aber ich bekomme von meiner freundin 10 euro, wenn ich ihr ein Wort mit über 500 buchstaben sagen kann!
Bitte kann mir jemand sagen, wo ich ihn finde oder wie er heißt? ich habe nur bis morgen 17:00 uhr zeit-bitte!!!
Wie wär's auf Englisch? Das längste Wort im Englischen ist "Titin". Zumindest dessen korrekte chemische Bezeichnung, mit 189819 Buchstaben. Deutsch ist ja langweilig. Da kann man ja beliebige Worte sinnlos aneinanderreihen. Tastaturstaubsaugerbeutelverschlussherstellungs... bla bla bla....
Ich würde einfach das File zeilenweise also ArrayListe mit Strings einlesen und dann für jeden Statistik wert eine eigene Methode schreiben die die Liste als Argument hat...
Wenn man Anfänger ist, sieht man oft den Wald vor lauter Bäume nicht und man weiß nicht wie man ansetzen soll, da kann ein Anfang schon sehr hilfreich sein...
also ein Anfang könnte mal so aussehen:
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
Test tester = new Test();
ArrayList<String> lines = tester.getFileAsList(new File("c://test.txt"));
System.out.println("Zeichen: "+tester.countCharacters(lines));
System.out.println("Wörter: "+tester.countWords(lines));
}
public ArrayList<String> getFileAsList(File f){
ArrayList<String> result = new ArrayList<String>();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(f));
String line;
while((line=reader.readLine())!=null){
result.add(line);
}
} catch (Exception e) {
//Logging
e.printStackTrace();
}finally{
if(reader!=null){
try {reader.close(); } catch (IOException e1) {}
}
}
return result;
}
// Anzahl aller Zeichen
public int countCharacters(ArrayList<String> lines){
int result = 0;
for(String line: lines){
result += line.length();
}
result+=lines.size()-1; //die Zeilenumbrüche noch dazu.
return result;
}
//Anzahl aller Wörter
public int countWords(ArrayList<String> lines){
int result = 0;
for(String line: lines){
result += line.split(" ").length;
}
return result;
}
}
Der Nachteil bei einem fremden Anfang ist halt, dass dies der einfach Teil war und jetzt kommen die schweren sachen die du mit einem fremden Rahmen lösen musst... aber das ist eine andere geschichte...
Hallo, das hier Zählt auch die Zeichen aber ohne "Blanks"
Blanks, werden erzetzt
Java:
// Anzahl aller Zeichen
public int countCharacters(ArrayList<String> lines){
int result = 0;
int zeichen;
for(String line: lines){
zeichen = line.replaceAll(" ","").length();
//result += line;
result += zeichen;
}
//result += line; //.size()-1; //die Zeilenumbrüche noch dazu.
return result;