Zugriff von main-Klasse auf externe Klassen

J

Java-Fee

Gast
Hallo,

ich hab einen Ordner mit 3 java-Dateien, und möchte, dass bei Aufruf der main-Klasse auf die entsprechenden Klassen zurückgegriffen wird.

Ich hatte das Programm zuerst als eine Java-Datei geschrieben, dort hat es auch tadellos funktioniert, aber beim splitten auf 3 Dateien bin ich irgendwie völlig durcheinandergekommen.

Ich möchte den Text-String aus der Main-Klasse an die Text-Klasse übergeben, dort wird sie entsprechend abgearbeitet, die dort vormals enthaltene Sortierfunktion möchte ich in einer externen Klasse haben.

Kann mir jemand helfen, wie ich die jew. Methoden am besten anspreche, bzw. welche Attribute ich mit übergeben muss...?


Java:
public class Aufgabe_8 {

  public static void main(String [] arg) {

    String textString = "Herr Bundespräsident, Herr Ministerpräsident, Herr Landtagspräsident, Herr Kardinal, lieber Herr Zehetmair und lieber Freund Theo Waigel!"+
	                    "Während ich mir die Reden anhöre, gingen meine Gedanken in vergangene Zeiten zurück, und ich fragte mich: 'Wann warst du zum ersten Mal in München?'"+
                        "Wenn ich mich recht entsinne, war das Ende März 1945. Ich war damals gerade 15 Jahre alt und ich befand mich als Flaghelfer in Berchtesgaden."+
                        "Wir fuhren an einem Tag von Berchtesgaden nach München, um etwas dorthin zu transportieren. Ich kannte München noch nicht und meine erste Begegnung mit der Stadt war ein Schock,"+
                        "denn sie war ein einziger Trümmerhaufen. Angesichts dieses Elends sahen weder wir Kinder noch die Erwachsenen eine positive Zukunft. Doch wir haben es geschafft!"+
                        "Diese großartige Generation meiner Eltern, der Großeltern und vielleicht der Urgroßeltern verzweifelte trotz allem nicht.";

    Text txt = new Text( textString ); // übergibt Text an Text-Methode

    txt.printWordFreqStat(); //soll die geordnete Liste ausgeben

  }

}

Java:
import java.io.*;

class Text {

	static void text(textString) {


		//Variablendefinitionen
		int textlength = 0;
		int ch;
		boolean last_was_char = false;
		String words[];
		int index;
		String[] word_count;
		int temp_zahl;
		int pos;


		//keine Textauswertung
		if (textString.length()==0) {
			System.exit(1);
		}//if

		//in Kleinbuchstaben umwandeln
		textString = textString.toLowerCase();

		//Wortanzahl ermitteln
		for (int i=0; i<textString.length(); i++) {
			//Zeichen als ASCII-Code speichern
			ch = (int)textString.charAt(i);

			//wenn Zeichen Buchstabe ist
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				//--> letztes Zeichen ist Buchstabe
				last_was_char = true;
			}//if
			else if(last_was_char){
				//letztes Zeichen kein Buchstabe
				last_was_char = false;
				//-->Wort zuende
				textlength++;
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for


		//Array aus Strings mit der Anzahl der Woerter erstellen
		words = new String[textlength];

		//variablen initialisieren
		words[0] = "";
		last_was_char = false;
		index = 0;

		//Woerter einzeln in String-Array words ablegen
		for (int i=0; i<text.length(); i++) {
			ch = (int)text.charAt(i);
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				last_was_char = true;
				words[index] +=	text.charAt(i);
			}//if
			else if(last_was_char){
				last_was_char = false;
				index++;
				if (index < textlength)
				words[index] = "";
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for

		//Array alphabetisch sortieren
		java.util.Arrays.sort( words );

        //Aufruf der Sortierfunktion
		SelectionSort.selSort( words );

		//



	}//text

}//class

Java:
class SelectionSort {

   /** static void selSort(String[] str, int[] freq) {
    	int j;
    	for (int i = 1; i < freq.length; i++) {
    		j = maxIndex (freq,i);
    		swap (freq, i, j);
    		swap (str, i, j);
    	}
    }

    static void swap (int[] a, int i, int j) {
    	int buffer = a[i];
    	a[i] = a[j];
    	a[j] = buffer;
    }*/



   /**
	* Ermitteln der Worthäufigkeit
 	* Fuer jedes Wort wird die Anzahl angegeben
 	* In Array Word_count eingetragen als: "ANZAHL"_"WORT"
	*/

	static void selSort() {

		//initialisieren der Variablen
		word_count = new String[textlength];
		temp_zahl = 1;
		pos = 0;

		for (int i=0; i<index; i++) {
			word_count[i] = "_";
			if (words[i].equals(word_count[pos])) {
				temp_zahl++;
				if (i==index-1) {
					word_count[pos] = temp_zahl + "_" +word_count[pos];
				}//if
			}//if
			else {
				if (i > 0) {
					word_count[pos] = temp_zahl + "_" +word_count[pos];
					pos++;
					temp_zahl = 1;
				}//if
				word_count[pos] = words[i];
				if (i==index-1) {
					word_count[pos] = temp_zahl + "_" +word_count[pos];
				}//if
			}//else
		}//for

		//Array Word_count nach der Anzahl sortieren
		java.util.Arrays.sort( word_count );

		//Variablen initialisieren
		int i=pos;

		while (true) {

			//Array temp ist von der Groesse 2 und enthalt das aktuelle Wort und seine Anzahl
			String temp[] = word_count[i].split("_");

			//falls weniger als 10 Woerter enthalten sind
			if(i==0) {
				System.out.println(temp[1] + " " + temp[0] + " " +
					(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );
				break;
			}//if
			//sonst die ersten Zehn ausgeben
			else if ((i <= pos-9)) {
				String temp2[] = word_count[pos-9].split("_");
				if (Integer.parseInt(temp[0]) < Integer.parseInt(temp2[0]) ) {
					break;
				}//if
			}//else if
			System.out.println(temp[1] + " " + temp[0] + " " +
				(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );

			i--;
		}//while   

		//Rückgabe Anzahl Wörter
		System.out.println(+textlength);
	}
}

Die printWordFreqStat Methode ist ja quasi der Inhalt der while-Schleife. Wie kann ich die am einfachsten als Methode verpacken, einfach:
Java:
static void printWordFreqStat {}
?
 
C

Camino

Gast
Wenn du in der main das so aufrufst:
Java:
 Text txt = new Text( textString );
Dann brauchst du so etwa eine solche Text-Klasse (grob vereinfacht):
Java:
public class Text {

    private String meinText;

    // Konstruktor
    public Text(String meinText) {

    this.meinText = meinText;  // übergebener Parameter an Objektvariable zuweisen

    }


    // Dann kommen weitere Methoden, in denen du
    // auf die Objektvariable meinText zugreifen kannst.

}
 
J

Java-Fee

Gast
...aber ich muss doch keinen neuen Tsring initialisieren, wenn ich den String "textString" verwenden wil, oder? Der wird ja in der main-Klasse angegeben...
 
C

Camino

Gast
Kommt halt darauf an, was du mit dem übergebenen String in der Klasse Text machen möchtest. Wenn du weitere Methoden erstellst und dann auf den String zugreifen möchtest, solltest du ihn als Objektvariable zuweisen.
 
J

Java-Fee

Gast
...naja, nicht viel. :)

In der Klasse Text sollen die Methoden zum normalisieren, ordnen und sortieren von dem übergebenen Text stehen. An sich stehen sie ja schon da.

Lediglich die Methode SelectionSort soll in einer separaten Klasse vorhanden sein.
 
J

Java-Fee

Gast
...ich hab die einzelnen Sachen nochmal durchgeschaut, bin, um Fehlereinzugrenzen, erstmal wieder von der externen Klasse zum Sortieren weg.

Die beiden Klassen sollten eigentlich laufen (dachte ich), zumindest kompiliert JCreator die Klasse Text fehlerfrei. Beim Aufruf über die main-Klasse gibts wohl ein Problem mit der Methodenbezeichnung, wie kann ich das umgehen...? (ich bekomme da " invalid method declaration", "identifier expected" und "cannot find symbol")

Java:
public class Aufgabe_8 {

  public static void main(String [] arg) {

    String textString = "Herr Bundespräsident, Herr Ministerpräsident, Herr Landtagspräsident, Herr Kardinal, lieber Herr Zehetmair und lieber Freund Theo Waigel!"+
	                    "Während ich mir die Reden anhöre, gingen meine Gedanken in vergangene Zeiten zurück, und ich fragte mich: 'Wann warst du zum ersten Mal in München?'"+
                        "Wenn ich mich recht entsinne, war das Ende März 1945. Ich war damals gerade 15 Jahre alt und ich befand mich als Flaghelfer in Berchtesgaden."+
                        "Wir fuhren an einem Tag von Berchtesgaden nach München, um etwas dorthin zu transportieren. Ich kannte München noch nicht und meine erste Begegnung mit der Stadt war ein Schock,"+
                        "denn sie war ein einziger Trümmerhaufen. Angesichts dieses Elends sahen weder wir Kinder noch die Erwachsenen eine positive Zukunft. Doch wir haben es geschafft!"+
                        "Diese großartige Generation meiner Eltern, der Großeltern und vielleicht der Urgroßeltern verzweifelte trotz allem nicht.";

    Text txt = new Text( textString ); // übergibt Text an Text-Methode

    //txt.printWordFreqStat(); //soll die geordnete Liste ausgeben

  }

}

Java:
import java.io.*;

 class Text {

        static void Text (String textString) {

        //Attribute
        //String textString;

	    //Konstruktor
     	//public Text (String textString) {
     	//this.textString = textString; /**Parameter an Objektvariable zuweisen*/
     	//}

		//Variablendefinitionen
		int textlength = 0;
		int ch;
		boolean last_was_char = false;
		String[] word;
		int index;
		String[] freq;
		int temp_zahl;
		int pos;

		/**in Kleinbuchstaben umwandeln*/
		textString = textString.toLowerCase();

		/**Wortanzahl ermitteln*/
		for (int i=0; i<textString.length(); i++) {
			/**Zeichen als int casten*/
			ch = (int)textString.charAt(i);

			//wenn Zeichen Buchstabe ist
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				//--> letztes Zeichen ist Buchstabe
				last_was_char = true;
			}//if
			else if(last_was_char){
				//letztes Zeichen kein Buchstabe
				last_was_char = false;
				//-->Wort zuende
				textlength++;
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for


		//Array aus Strings mit der Anzahl der Woerter erstellen
		word = new String[textlength];

		//variablen initialisieren
		word[0] = "";
		last_was_char = false;
		index = 0;

		//Woerter einzeln in String-Array word ablegen
		for (int i=0; i<textString.length(); i++) {
			ch = (int)textString.charAt(i);
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				last_was_char = true;
				word[index] +=	textString.charAt(i);
			}//if
			else if(last_was_char){
				last_was_char = false;
				index++;
				if (index < textlength)
				word[index] = "";
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for

		//Array alphabetisch sortieren
		java.util.Arrays.sort( word );

		//initialisieren der Variablen
		freq = new String[textlength];
		temp_zahl = 1;
		pos = 0;

		/**
		 * Ermitteln der Worthäufigkeit
 		 * Fuer jedes Wort wird die Anzahl angegeben
 		 * In Array Word_count eingetragen als: "ANZAHL"_"WORT"
		 */
		for (int i=0; i<index; i++) {
			freq[i] = "_";
			if (word[i].equals(freq[pos])) {
				temp_zahl++;
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//if
			else {
				if (i > 0) {
					freq[pos] = temp_zahl + "_" +freq[pos];
					pos++;
					temp_zahl = 1;
				}//if
				freq[pos] = word[i];
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//else
		}//for

		//Array Word_count nach der Anzahl sortieren
		java.util.Arrays.sort( freq );

		//Variablen initialisieren
		int i=pos;


		while (true) {

			//Array temp ist von der Groesse 2 und enthalt das aktuelle Wort und seine Anzahl
			String temp[] = freq[i].split("_");

			//falls weniger als 10 Woerter enthalten sind
			if(i==0) {
				System.out.println(temp[1] + " " + temp[0] + " " +
					(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );
				break;
			}//if
			//sonst die ersten Zehn ausgeben
			else if ((i <= pos-9)) {
				String temp2[] = freq[pos-9].split("_");
				if (Integer.parseInt(temp[0]) < Integer.parseInt(temp2[0]) ) {
					break;
				}//if
			}//else if
			System.out.println(temp[1] + " " + temp[0] + " " +
				(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );

			i--;
		}//while

		//Ausgabe Anzahl Wörter
		System.out.println("Wortzahl: "+textlength);
	}//main

}//class

...nächster Schritt wäre dann die Sortiermethode auslagern sowie den Befehl txt-printWordFreqStat impelemntieren, ich denke dass wird eine Methode für die Ausgabe der Worthäufigkeit darstellen. Leider funzt in meinem Prog die limitierung auf die 10 häufigsten Wörter noch nicht, vielleicht weiss da auch jemand, woran es liegt....
 
C

Camino

Gast
Na ja, wie schon oben geschrieben ist deine Text-Klasse so nicht OK:
Java:
...
class Text {
 
        static void Text (String textString) {
...

Code:
static void Text (String textString)
ist eine Methode, die den gleichen Namen wie die Klasse (Text) hat.

Du brauchst entweder einen Konstruktor oder eine Methode, dem/der du deinen textString übergibst. Du kannst das ja testweise einfach mal so probieren (und dann erweitern):
Java:
public class Text2 {
 
    private String meinText;
 
    // Konstruktor
    public Text2(String uebergebenerText) {
 
        this.meinText = uebergebenerText;  // übergebener Parameter an Objektvariable zuweisen

        ausgabe();  // Methode aufrufen zur Ausgabe der Objektvariable auf der Konsole
 
    }
 
 
    public void ausgabe() {
        system.out.println(meinText);
    } 
}

Und in deiner main rufst du das dann so auf:
Java:
Text2 txt = new Text2( textString );
 
Zuletzt bearbeitet von einem Moderator:
T

thorstennn

Gast
Was genau soll die Text-Klasse denn machen bzw. welche Methoden soll sie beinhalten? Nur die Häufigkeiten der Wörter zählen?

Das ließe sich einfache realisieren...

Und wie lautet Aufgabe 8?
 
T

thorstennn

Gast
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EinfachesZählen {

    private static final Pattern WORD_PAT = Pattern.compile("[\\wäöüÄÖÜß]+");

    public static HashMap<String, Integer> getWordFrecMap(String str) {
        HashMap<String, Integer> res = new HashMap<String, Integer>(str.length() / 2);
        Matcher m = WORD_PAT.matcher(str);
        while (m.find()) {
            String s = m.group().toLowerCase();
            if (res.containsKey(s)) {
                res.put(s, res.get(s) + 1);
            } else {
                res.put(s, 1);
            }
        }
        return res;
    }

    public static String readText(String filename) {
        StringBuilder strb = new StringBuilder();
        BufferedReader in = null;
        try {
            in = new BufferedReader(new FileReader(filename));
            String line;
            while ((line = in.readLine()) != null) {
                strb.append(line);
                strb.append('\n');
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return strb.toString();
    }

    public static void main(String[] args) {
        HashMap<String, Integer> map = getWordFrecMap(readText("Rede.txt"));
        Object[] arr = map.entrySet().toArray();
        Arrays.sort(arr, new Comparator<Object>() {

            public int compare(Object o1, Object o2) {
                int i1 = ((Map.Entry<String, Integer>) o1).getValue();
                int i2 = ((Map.Entry<String, Integer>) o2).getValue();
                return i1 < i2 ? -1 : i1 > i2 ? 1 : 0;
            }
        });
        System.out.println(Arrays.toString(arr));
    }
}
 
J

Java-Fee

Gast
@Camino: Mit dem Konstruktor muss ich dann aber immer auch den Textstring so ansprechen? Also "this.textString"...?

@thorstenn: Aufgabenstellung lautet, aufbauend auf der main-Datei (aufgabe_8, siehe oben) eine Klasse "Text" sowie eine Klasse "SelectionSort" erstellen, die den in der Main-Methode angegebenen Text übernimmt, auswertet, sowie die Arrays (die man infolgedessen für die verschd. Wörter und deren Häufigkeiten angelegt hat) nach der Häufigkeit sortiert und die 10 häufigsten Wörter mitsamt deren Häufigkeit ausgibt.

Klingt einfach, ein Java-Programm, dass alles in einer Datei macht, hatte ich ja schon, aber ich komme mit dem übergeben von einer Klasse zur nächsten nicht klar.

Da die Sortierfunktion in der obigen Klasse "Text" noch drin ist, hoffe ich erstmal dass mir jemand hilft wie ich in der Klasse mit dem "textString" aus der Main-Klasse arbeiten kann - siehe das Problem oben. Camino versucht mir ja schon zu helfen, aber ich steh da komplett auf dem schlauch... :(
 

bLaSt

Aktives Mitglied
@Camino: Mit dem Konstruktor muss ich dann aber immer auch den Textstring so ansprechen? Also "this.textString"...?

@thorstenn: Aufgabenstellung lautet, aufbauend auf der main-Datei (aufgabe_8, siehe oben) eine Klasse "Text" sowie eine Klasse "SelectionSort" erstellen, die den in der Main-Methode angegebenen Text übernimmt, auswertet, sowie die Arrays (die man infolgedessen für die verschd. Wörter und deren Häufigkeiten angelegt hat) nach der Häufigkeit sortiert und die 10 häufigsten Wörter mitsamt deren Häufigkeit ausgibt.

Klingt einfach, ein Java-Programm, dass alles in einer Datei macht, hatte ich ja schon, aber ich komme mit dem übergeben von einer Klasse zur nächsten nicht klar.

Da die Sortierfunktion in der obigen Klasse "Text" noch drin ist, hoffe ich erstmal dass mir jemand hilft wie ich in der Klasse mit dem "textString" aus der Main-Klasse arbeiten kann - siehe das Problem oben. Camino versucht mir ja schon zu helfen, aber ich steh da komplett auf dem schlauch... :(

Um die Antwort vorneweg zu nehmen, ja du musst das so machen. Da du ja sagen willst,dass deine obere deklarierte Variable, sie kann notfalls auch ebenfalls so heißen wie du sie in der main Methode bezeichnest, genau diese Variable ist, die durch den Konstruktor übergeben wird. Und mit dem selbstdefinierten Konstruktor hast du halt den Vorteil,dass beim erzeugen deines Objektes an diesen Anweisungen nichts vorbeiführt. Um im darauffolgenden auf deine Methoden zu zu greifen musst du normalerweise folgende Syntax verwenden: "Objektnname.MethodenName();"
Denn du möchtest deine Methoden aus anderen Klassen ja für ein bestimmtes Objekt verwenden
 
J

Java-Fee

Gast
Also ich hab jetzt 2 entsprechende Klassen, die lassen sich jeweils auch fehlerfrei compilieren. Was fehlt denn jetzt noch damit bei aufruf der Klasse Aufgabe_8 auch die Klasse Text entsprechend abgearbeitet wird...? Der String (Namens "textString") sollte doch richtig übergeben werden....

Aufgabe_8:
Java:
public class Aufgabe_8 {

  public static void main(String [] arg) {

    String textString = "Herr Bundespräsident, Herr Ministerpräsident, Herr Landtagspräsident, Herr Kardinal, lieber Herr Zehetmair und lieber Freund Theo Waigel!"+
	                    "Während ich mir die Reden anhöre, gingen meine Gedanken in vergangene Zeiten zurück, und ich fragte mich: 'Wann warst du zum ersten Mal in München?'"+
                        "Wenn ich mich recht entsinne, war das Ende März 1945. Ich war damals gerade 15 Jahre alt und ich befand mich als Flaghelfer in Berchtesgaden."+
                        "Wir fuhren an einem Tag von Berchtesgaden nach München, um etwas dorthin zu transportieren. Ich kannte München noch nicht und meine erste Begegnung mit der Stadt war ein Schock,"+
                        "denn sie war ein einziger Trümmerhaufen. Angesichts dieses Elends sahen weder wir Kinder noch die Erwachsenen eine positive Zukunft. Doch wir haben es geschafft!"+
                        "Diese großartige Generation meiner Eltern, der Großeltern und vielleicht der Urgroßeltern verzweifelte trotz allem nicht.";

    Text txt = new Text( textString ); /** übergibt Text an Text-Methode */

    //txt.printWordFreqStat(); /** soll die geordnete Liste ausgeben */

  }

}

Text:
Java:
import java.io.*;

public class Text {


	//Konstruktor
	public Text (String textString) {


		//Variablendefinitionen
		int textlength = 0;
		int ch;
		boolean last_was_char = false;
		String[] words;
		int index;
		String[] freq;
		int temp_zahl;
		int pos;

		/** in Kleinbuchstaben umwandeln */
		textString = textString.toLowerCase();

		/** Wortanzahl ermitteln */
		for (int i=0; i<textString.length(); i++) {
			//Zeichen als ASCII-Code speichern
			ch = (int)textString.charAt(i);

			//wenn Zeichen Buchstabe ist
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				//--> letztes Zeichen ist Buchstabe
				last_was_char = true;
			}//if
			else if(last_was_char){
				//letztes Zeichen kein Buchstabe
				last_was_char = false;
				//-->Wort zuende
				textlength++;
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for


		/** Array aus Strings mit der Anzahl der Woerter erstellen */
		words = new String[textlength];

		//variablen initialisieren
		words[0] = "";
		last_was_char = false;
		index = 0;

		//Woerter einzeln in String-Array words ablegen
		for (int i=0; i<textString.length(); i++) {
			ch = (int)textString.charAt(i);
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				last_was_char = true;
				words[index] +=	textString.charAt(i);
			}//if
			else if(last_was_char){
				last_was_char = false;
				index++;
				if (index < textlength)
				words[index] = "";
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for

		//Array alphabetisch sortieren
		java.util.Arrays.sort( words );

		//initialisieren der Variablen
		freq = new String[textlength];
		temp_zahl = 1;
		pos = 0;

		/**
		 * Ermitteln der Worthäufigkeit
 		 * Fuer jedes Wort wird die Anzahl angegeben
 		 * In Array Word_count eingetragen als: "ANZAHL"_"WORT"
		 */
		for (int i=0; i<index; i++) {
			freq[i] = "_";
			if (words[i].equals(freq[pos])) {
				temp_zahl++;
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//if
			else {
				if (i > 0) {
					freq[pos] = temp_zahl + "_" +freq[pos];
					pos++;
					temp_zahl = 1;
				}//if
				freq[pos] = words[i];
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//else
		}//for

		//Array Word_count nach der Anzahl sortieren
		java.util.Arrays.sort( freq );

		//Variablen initialisieren
		int i=pos;


		while (true) {

			//Array temp ist von der Groesse 2 und enthalt das aktuelle Wort und seine Anzahl
			String temp[] = freq[i].split("_");

			//falls weniger als 10 Woerter enthalten sind
			if(i==0) {
				System.out.println(temp[1] + " " + temp[0] + " " +
					(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );
				break;
			}//if
			//sonst die ersten Zehn ausgeben
			else if ((i <= pos-9)) {
				String temp2[] = freq[pos-9].split("_");
				if (Integer.parseInt(temp[0]) < Integer.parseInt(temp2[0]) ) {
					break;
				}//if
			}//else if
			System.out.println(temp[1] + " " + temp[0] + " " +
				(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );

			i--;
		}//while

		//Ausgabe Anzahl Wörter
		System.out.println("Wortzahl: "+textlength);
	}//main

}//class
 
J

Java-Fee

Gast
@blast: Alles klar, habs grad erst gelesen. So wie oben geht es nicht?

Dann müsste es doch reichen, folgendes einzufügen:

Java:
public class text
  
   private String text;
   
   //Konstruktor
   public text (String textString) {
   this.text = textString;
   }

und darunter dann alle Anweisungen/Methoden, wo ich mit this.text weiterarbeite...?
 

jgh

Top Contributor
in der Klasse [c]text[/c] btw Klassennamen schreibt man groß!!! kannst du auch ohne
Code:
this
mit
Code:
text
auf den Text zugreifen.
 
J

Java-Fee

Gast
...sorry, das war ein Tipfehler.

Ich habs jetzt geändert, natürlich muss ich nun die ganzen Anweisungen in eine Methode verpacken, nur weiss ich nicht was für einen Datentyp ich da angebe - int, für die Rückgabe von textlength am schluss, oder geht das auch mit void? Wenn ich void nehme, meckert JCreator wegen der Methodenbezeichnung und sagt "identifier expected"...

Java:
import java.io.*;

public class Text {


    private String text;

    //Konstruktor
	public Text (String textString) {
    this.text = textString;
	}

	//Methoden
	void Text (text) {

		//Variablendefinitionen
		int textlength = 0;
		int ch;
		boolean last_was_char = false;
		String[] words;
		int index;
		String[] freq;
		int temp_zahl;
		int pos;

		/** in Kleinbuchstaben umwandeln */
		text = text.toLowerCase();

		/** Wortanzahl ermitteln */
		for (int i=0; i<text.length(); i++) {
			/** Zeichen als ASCII-Code speichern */
			ch = (int)text.charAt(i);

			//wenn Zeichen Buchstabe ist
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				/** letztes Zeichen ist Buchstabe */
				last_was_char = true;
			}//if
			else if(last_was_char){
				/** letztes Zeichen kein Buchstabe */
				last_was_char = false;
				/** Wortende */
				textlength++;
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for


		/** Array aus Strings mit der Anzahl der Woerter erstellen */
		words = new String[textlength];

		/** Variablen initialisieren */
		words[0] = "";
		last_was_char = false;
		index = 0;

		/** Wörter einzeln in String-Array words ablegen */
		for (int i=0; i<text.length(); i++) {
			ch = (int)textString.charAt(i);
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				last_was_char = true;
				words[index] +=	text.charAt(i);
			}//if
			else if(last_was_char){
				last_was_char = false;
				index++;
				if (index < textlength)
				words[index] = "";
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for

		/** Array alphabetisch sortieren */
		java.util.Arrays.sort( words );

		/** Initialisieren der Variablen */
		freq = new String[textlength];
		temp_zahl = 1;
		pos = 0;

		/**
		 * Ermitteln der Worthäufigkeit
 		 * Fuer jedes Wort wird die Anzahl angegeben
 		 * In Array freq eingetragen als: "ANZAHL"_"WORT"
		 */
		for (int i=0; i<index; i++) {
			freq[i] = "_";
			if (words[i].equals(freq[pos])) {
				temp_zahl++;
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//if
			else {
				if (i > 0) {
					freq[pos] = temp_zahl + "_" +freq[pos];
					pos++;
					temp_zahl = 1;
				}//if
				freq[pos] = words[i];
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//else
		}//for

		/** Array freq nach der Anzahl sortieren */
		java.util.Arrays.sort( freq );

		/** Variablen initialisieren */
		int i=pos;


		while (true) {

			/** Array temp enthält das aktuelle Wort und die Häufigkeit */
			String temp[] = freq[i].split("_");

			/** falls weniger als 10 Wörter enthalten sind */
			if(i==0) {
				System.out.println(temp[1] + " " + temp[0] + " " +
					(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );
				break;
			}//if
			/** sonst die ersten Zehn ausgeben */
			else if ((i <= pos-9)) {
				String temp2[] = freq[pos-9].split("_");
				if (Integer.parseInt(temp[0]) < Integer.parseInt(temp2[0]) ) {
					break;
				}//if
			}//else if
			System.out.println(temp[1] + " " + temp[0] + " " +
				(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );

			i--;
		}//while

		//Ausgabe Anzahl Wörter
		System.out.println("Wortzahl: "+textlength);

	}//main

}//class
 

jgh

Top Contributor
[JAVA=14]void Text (String text) {[/code]
btw. Methodennamen auch klein ;)

[java=61] ch = (int) text.charAt(i);[/code]
 

bLaSt

Aktives Mitglied
in der Klasse [c]text[/c] btw Klassennamen schreibt man groß!!! kannst du auch ohne
Code:
this
mit
Code:
text
auf den Text zugreifen.

Ja, solange sich die definierte Variable von der in der Methode übergebenen unterscheidet, da haste vollkommen recht, da braucht man kein this. Aber wenn die Bezeichnung gleich ist muss man es machen um die Referenz aufs aktuelle Objekt deutlich zu machen
 
J

Java-Fee

Gast
@Marcinek: Danke, das Vuch hab ich auch, aber ich poste nicht umsonst unter Anfänger-Fragen. Wenn ich weiterhin die Zeit hätte, alle mir vorliegenden Bücher zu studieren, würde ich auch keinen damit belasten.

Da hier aber meistens Fachmänner unterwegs sind, die schnell und zielgerichtet Tips geben können, habe ich gefragt.

Nach den letzten Posts weiss ich genauso viel wie vorher, auch wenn die Ratschläge gut sind. Aber kann ich die Methode jetzt auch

static String (text) nennen, oder wie? Ich will ja nur, dass der in der Klasse "Aufgabe_8" angegebene string in der Klasse "Text" bearbeitet wird.... :(
 

bLaSt

Aktives Mitglied
Also es ist sehr schwer dir hier zu helfen,weil viele elementare Fehler in deinem Code sind. Deine Konstruktordefinition ist nicht schlüssig. Was willst du damit überhaupt erreichen? In deinem Grundcode vom ersten Post fehlt schon mal dein return Statement deines Konstruktors. Du solltest dir mal dringend anschauen wie ein Konstruktor aufgebaut ist. Grad auf dem Link den Marcinek gepostet hat in java ist auch insel. Ich könnt dir das zwar ez alles verbessern, aber dein Lerneffekt wäre gleich 0.
Wie gesagt schau dir das nochmal genau an, vorallem auch das mit dem Call by Value und Call by Reference und der this-Anweisung.
 

bLaSt

Aktives Mitglied
@Marcinek: Danke, das Vuch hab ich auch, aber ich poste nicht umsonst unter Anfänger-Fragen. Wenn ich weiterhin die Zeit hätte, alle mir vorliegenden Bücher zu studieren, würde ich auch keinen damit belasten.

Da hier aber meistens Fachmänner unterwegs sind, die schnell und zielgerichtet Tips geben können, habe ich gefragt.

Nach den letzten Posts weiss ich genauso viel wie vorher, auch wenn die Ratschläge gut sind. Aber kann ich die Methode jetzt auch

static String (text) nennen, oder wie? Ich will ja nur, dass der in der Klasse "Aufgabe_8" angegebene string in der Klasse "Text" bearbeitet wird.... :(

Du versuchst ja einen Konstruktor aufzurufen, der gar nicht definiert ist. Da der String an Aufgabe_8 übergeben werden soll, musst du natürlich auch ein neues Aufgabe_8 Objekt erzeugen um dort den Konstruktor aufzurufen. Ich habs ez mal verbessert.
Java:
public class Text {

	public static void main(String [] arg) {
		 .
                 .
                 .
		 
 Aufgabe_8 txt = new Aufgabe_8( textString );
}
}
 
J

Java-Jan

Gast
@Marcinek: Danke, das Vuch hab ich auch, aber ich poste nicht umsonst unter Anfänger-Fragen. Wenn ich weiterhin die Zeit hätte, alle mir vorliegenden Bücher zu studieren, würde ich auch keinen damit belasten.

Da hier aber meistens Fachmänner unterwegs sind, die schnell und zielgerichtet Tips geben können, habe ich gefragt.

Nach den letzten Posts weiss ich genauso viel wie vorher, auch wenn die Ratschläge gut sind. Aber kann ich die Methode jetzt auch

static String (text) nennen, oder wie? Ich will ja nur, dass der in der Klasse "Aufgabe_8" angegebene string in der Klasse "Text" bearbeitet wird.... :(


Weißt du wo du auch Fachmänner findest, die dir helfen können? In deiner Laborübung ;)

Was an deinem zuletzt geposteten Quelltext nicht OK ist, ist der Name der Methode. Nur Konstruktoren dürfen so heißen wie die Klasse selbst. Nenn die Methode z.B. printWordFreqStat() (was ja zufällig die Methode ist, die aus der Main aufgerufen wird)
Den Text musst du der Methode nicht mehr übergeben, da er ja bei der Erzeugung eines Text-Objekts im Attribut "text" gespeichert wird.

Also es ist sehr schwer dir hier zu helfen,weil viele elementare Fehler in deinem Code sind. Deine Konstruktordefinition ist nicht schlüssig. Was willst du damit überhaupt erreichen? In deinem Grundcode vom ersten Post fehlt schon mal dein return Statement deines Konstruktors. Du solltest dir mal dringend anschauen wie ein Konstruktor aufgebaut ist. Grad auf dem Link den Marcinek gepostet hat in java ist auch insel. Ich könnt dir das zwar ez alles verbessern, aber dein Lerneffekt wäre gleich 0.
Wie gesagt schau dir das nochmal genau an, vorallem auch das mit dem Call by Value und Call by Reference und der this-Anweisung.

Return-Anweisung im Konstruktor? Call-by-reference in Java? Vielleicht solltest du selbst nochmal nachlesen.
 

bLaSt

Aktives Mitglied
Weißt du wo du auch Fachmänner findest, die dir helfen können? In deiner Laborübung ;)

Was an deinem zuletzt geposteten Quelltext nicht OK ist, ist der Name der Methode. Nur Konstruktoren dürfen so heißen wie die Klasse selbst. Nenn die Methode z.B. printWordFreqStat() (was ja zufällig die Methode ist, die aus der Main aufgerufen wird)
Den Text musst du der Methode nicht mehr übergeben, da er ja bei der Erzeugung eines Text-Objekts im Attribut "text" gespeichert wird.



Return-Anweisung im Konstruktor? Call-by-reference in Java? Vielleicht solltest du selbst nochmal nachlesen.

Du hast mich falsch verstanden. Ich habe nicht behauptet,dass es das gibt in Java, aber er sollte dennoch den unterschied kennen. Bezüglich der return-Anweisung, dass war nur die Fehleranzeige in Eclipse,weil Eclipse es net gepeilt hat das das ein Konstruktor sein soll. Ich habs halt reingeschrieben ohne drüber nachzudenken. Und man muss net gleich so unfreundlich werden zumal in meinem darauffolgenden Post hab ich ihm ja den verbesserungsvorschlag gegeben der nichts mit nem return zu tun hatte
 

Gerlon

Aktives Mitglied
o_O

Java:
MAIN!
  Text2 txt = new Text2( textString);
  txt.printWordFreqStat();

---------------------------------
KLASSE TEXT!
 private String textstring;
 
    //Konstruktor
    public Text2 (String textString) {
    this.textstring = textString;
    }
 
    //Methoden
public void printWordFreqStat() {

so sollte die übergabe passen, musst dann noch die variable text ändern in textstring
hatte es bei mir mal angepasst dein Programm und funktioniert soweit, fehlt nur noch die Auslagerung der Sortierfunktion.
 
Zuletzt bearbeitet:
C

Camino

Gast
Du versuchst ja einen Konstruktor aufzurufen, der gar nicht definiert ist. Da der String an Aufgabe_8 übergeben werden soll, musst du natürlich auch ein neues Aufgabe_8 Objekt erzeugen um dort den Konstruktor aufzurufen. Ich habs ez mal verbessert.
Java:
public class Text {

	public static void main(String [] arg) {
		 .
                 .
                 .
		 
 Aufgabe_8 txt = new Aufgabe_8( textString );
}
}
Ich glaube, bei dem Tipp hast du auch etwas durcheinander gebracht. Die main-Methode ist in Klasse Aufgabe_8 und dort wird auch dann ein neues Objekt der Klasse Text erstellt und dem Konstruktor von Text ein String mit übergeben. Nur damit Java-Fee jetzt
nicht noch dadurch verwirrt werden sollte...
 
Zuletzt bearbeitet von einem Moderator:
M

Marcinek

Gast
@Marcinek: Danke, das Vuch hab ich auch, aber ich poste nicht umsonst unter Anfänger-Fragen. Wenn ich weiterhin die Zeit hätte, alle mir vorliegenden Bücher zu studieren, würde ich auch keinen damit belasten.

Da hier aber meistens Fachmänner unterwegs sind, die schnell und zielgerichtet Tips geben können, habe ich gefragt.

Nach den letzten Posts weiss ich genauso viel wie vorher, auch wenn die Ratschläge gut sind. Aber kann ich die Methode jetzt auch

static String (text) nennen, oder wie? Ich will ja nur, dass der in der Klasse "Aufgabe_8" angegebene string in der Klasse "Text" bearbeitet wird.... :(

Natürlich können wir Tipps geben, aber was bringt dir das? 90 % dessen, was hier geschrieben wird, verstehst du nicht, weil die die ersten Kapitel in Java fehlen. Das Forum ist kein Ersatz für Bücher oder das Lernen von Grundlagen.

Das Forum ist auch keine interaktive Suchmaschine für Sachen, die einfach überall schon stehen.

Lese dir durch, wie man Methoden deklariert, dann wirst du die Antwort schnell finden. :rtfm:
 

bLaSt

Aktives Mitglied
Ich glaube, bei dem Tipp hast du auch etwas durcheinander gebracht. Die main-Methode ist in Klasse Aufgabe_8 und dort wird auch dann ein neues Objekt der Klasse Text erstellt und dem Konstruktor von Text ein String mit übergeben. Nur damit Java-Fee jetzt
nicht noch dadurch verwirrt werden sollte...

Achso ok, ja so wie er es halt definiert hatte zu Beginn war die main-Methode in der andern Klasse, wenn man es so betrachtet hast du vollkommen recht. Ich hab halt seinen Code übernommen.
Klar die main-Methode gerhört eigentlich in die Klasse Text rein, dann würds gehn
 
T

thorstennn

Gast
@thorstenn: Aufgabenstellung lautet, aufbauend auf der main-Datei (aufgabe_8, siehe oben) eine Klasse "Text" sowie eine Klasse "SelectionSort" erstellen, die den in der Main-Methode angegebenen Text übernimmt, auswertet, sowie die Arrays (die man infolgedessen für die verschd. Wörter und deren Häufigkeiten angelegt hat) nach der Häufigkeit sortiert und die 10 häufigsten Wörter mitsamt deren Häufigkeit ausgibt.

Klingt einfach, ein Java-Programm, dass alles in einer Datei macht, hatte ich ja schon, aber ich komme mit dem übergeben von einer Klasse zur nächsten nicht klar.

ich muss die genau Aufgabenstellung kennen. :D

Mit Selectionsort kann ja nur etwas sortiert werden, wenn es vorher in einzelne Elemente aufgeteilt wurde.

Also muss der Text erst in solche Elemente aufgeteilt werden.

Aber dein eigentliches Problem ist nicht das Splitten oder Zählen oder Sortieren, sondern eine statische Methode einer anderen Klasse aufzurufen?

Dann helfen keine Tipps, dann muss man Basics pauken. :D

Nebensächliches: Muss der Text hard coded sein? Soll immer nur dieser eine Text untersucht werden? Nur die genaue Aufgabenstellung hilft weiter. :D

Thorsten
 
J

Java-Fee

Gast
@alle, besonders gerlon und Java-Jan: danke, Programm läuft, sogar mit den 3 Klassen wie nach Aufgabenstellung.
 
T

thorstennn

Gast
Da du uns das nicht mitteilen möchtest, kann hier ja geschlossen werden.

Und die nächsten Hausaufgaben kannst du dann unter System.gc; - Hausaufgaben stellen. :D
 
J

Java-Fee

Gast
@thorstenn: Was meinst du denn mit nicht mitteilen? Wenn du auf die Uhrzeit des Posts geschaut hättest, da hatte ich keine Lust auf eine lange und breite Erklärung. Sobald feddich, werde ich den Thread schon als "erledigt" markieren...

Das mit gc ignoriere ich einfach mal - wenn du mir nicht helfen willst, dann lass es halt.

...um es auf den Punkt zu bringen, "Programm läuft" war etwas vorschnell, die 3 Klassen lassen sich zwar fehlerfrei kompilieren, aber die Ausgabe haut noch nicht komplett hin... Ich werde schauen ob ich es allein hinbekomme (bevor wieder irgendwer mit "raten hilft nicht" kommt), sonst poste ich den Stand nochmal.
 
J

Java-Fee

Gast
...also mit der Ausführung und Darstellung gibt es eigentlich keine Fehler, aber da die sortierfunktion ausgelagert werden soll, konzentriere ich mich darauf.

Die Klasse der sortierfunktion lässt sich zwar kompilieren, bei ausführung des Programmes erhalte ich aber nur einen Wert (plus Wort) sowie die Gesamtwortzahl. Ich denke es liegt (wieder) an der Übergabe von Argumenten.

ausserdem beschränkt sich die Ausgabe nicht auf 10 elemente (obwohl ich das in der while-Schleife drin habe in der text-Klasse), weiss jemand woran das liegt...?

Hier die 3 Klassen:

Java:
public class Aufgabe_8 {

  public static void main(String [] arg) {

    String textString = "Herr Bundespräsident, Herr Ministerpräsident, Herr Landtagspräsident, Herr Kardinal, lieber Herr Zehetmair und lieber Freund Theo Waigel!"+
	                    "Während ich mir die Reden anhöre, gingen meine Gedanken in vergangene Zeiten zurück, und ich fragte mich: 'Wann warst du zum ersten Mal in München?'"+
                        "Wenn ich mich recht entsinne, war das Ende März 1945. Ich war damals gerade 15 Jahre alt und ich befand mich als Flaghelfer in Berchtesgaden."+
                        "Wir fuhren an einem Tag von Berchtesgaden nach München, um etwas dorthin zu transportieren. Ich kannte München noch nicht und meine erste Begegnung mit der Stadt war ein Schock,"+
                        "denn sie war ein einziger Trümmerhaufen. Angesichts dieses Elends sahen weder wir Kinder noch die Erwachsenen eine positive Zukunft. Doch wir haben es geschafft!"+
                        "Diese großartige Generation meiner Eltern, der Großeltern und vielleicht der Urgroßeltern verzweifelte trotz allem nicht.";

    Text txt = new Text( textString ); /** übergibt Text an Text-Methode */

    txt.printWordFreqStat(); /** gibt die geordnete Liste aus */

  }

}

Java:
import java.io.*;

class Text {


    private String textString;

    //Konstruktor
	public Text (String textString) {
    this.textString = textString;
	}

	//Methoden
	public void printWordFreqStat() {

		/** Variablen initialisieren */
		int textlength = 0;
		int ch;
		boolean last_was_char = false;
		String[] words;
		int index;
		String[] freq;
		int temp_zahl;
		int pos;

		/** in Kleinbuchstaben umwandeln */
		textString = textString.toLowerCase();

		/** Wortanzahl ermitteln */
		for (int i=0; i<textString.length(); i++) {
			/** Zeichen als ASCII-Code speichern */
			ch = (int)textString.charAt(i);

			//wenn Zeichen Buchstabe ist
			if ((ch > 96 && ch < 123)||ch == 223||ch == 228||ch == 246||ch == 252) {
				/** letztes Zeichen ist Buchstabe */
				last_was_char = true;
			}//if
			else if(last_was_char){
				/** letztes Zeichen kein Buchstabe */
				last_was_char = false;
				/** Wortende */
				textlength++;
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for


		/** Array aus Strings mit der Anzahl der Wörter erstellen */
		words = new String[textlength];

		/** Variablen initialisieren */
		words[0] = "";
		last_was_char = false;
		index = 0;

		/** Wörter einzeln in String-Array words ablegen */
		for (int i=0; i<textString.length(); i++) {
			ch = (int)textString.charAt(i);
			if ((ch > 96 && ch < 123)||ch==223||ch== 228||ch==246||ch == 252) {
				last_was_char = true;
				words[index] +=	textString.charAt(i);
			}//if
			else if(last_was_char){
				last_was_char = false;
				index++;
				if (index < textlength)
				words[index] = "";
			}//else if
			else {
				last_was_char = false;
			}//else
		}//for

		/** Array alphabetisch sortieren */
		java.util.Arrays.sort( words );

		/** Initialisieren der Variablen */
		freq = new String[textlength];
		temp_zahl = 1;
		pos = 0;

		String[] s = SelectionSort.Sort (words, freq, index, temp_zahl, pos);

		
		/** Array freq nach der Anzahl sortieren
		java.util.Arrays.sort( freq ); */

		/** Variablen initialisieren */
		int i=pos;


		while (true) {

			/** Array temp enthält das aktuelle Wort und die Häufigkeit */
			String temp[] = freq[i].split("_");

			/** falls weniger als 10 Wörter enthalten sind */
			if(i==0) {
				System.out.println(temp[1] + " " + temp[0] + " " +
					(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );
				break;
			}//if
			/** sonst die ersten Zehn ausgeben */
			else if ((i <= pos-9)) {
				String temp2[] = freq[pos-9].split("_");
				if (Integer.parseInt(temp[0]) < Integer.parseInt(temp2[0]) ) {
					break;
				}//if
			}//else if
			System.out.println(temp[1] + " " + temp[0] + " " +
				(float)((int)(Float.parseFloat(temp[0])*100/textlength*100))/100 +"%" );

			i--;
		}//while

		/** Ausgabe Anzahl Wörter */
		System.out.println("Wortzahl: "+textlength);

	} //main

} //class

Java:
class SelectionSort {

	public static String[] Sort (String[] words, String[] freq, int index, int temp_zahl, int pos) {

		/**
		 * Ermitteln der Worthäufigkeit
 		 * Fuer jedes Wort wird die Anzahl angegeben
 		 * In Array freq eingetragen als: "ANZAHL"_"WORT"
		 */
		for (int i=0; i<index; i++) {
			freq[i] = "_";
			if (words[i].equals(freq[pos])) {
				temp_zahl++;
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//if
			else {
				if (i > 0) {
					freq[pos] = temp_zahl + "_" +freq[pos];
					pos++;
					temp_zahl = 1;
				}//if
				freq[pos] = words[i];
				if (i==index-1) {
					freq[pos] = temp_zahl + "_" +freq[pos];
				}//if
			}//else
		}//for

		/** Array freq nach der Anzahl sortieren */
		java.util.Arrays.sort( freq );

        return freq;
	}
}
 
M

Marcinek

Gast
Ich würde ein paar Debugausgaben oder debugen um den Fehler zu finden.

Ich finde, dass das extrem umständlich programmiert ist. Der Grund wird wohl eine mangelnde Planung des ganzen mit Stift und papier sein ;D

Das wurde auch in dem anderen Thread angeregt und ich finde es gut.

Wieso setzt ihr euch nicht zusammen? - Ich hatte schon mehrfach angeboten dabei zu sein um zu helfen. ;)

Gruß Martin

P.S. Thorstenn ist ein gemeiner Forentrolll . Einfach ignorieren.
 
J

Java-Jan

Gast
Klasse Text:
In Zeile 83 setzt du pos auf 0. In Zeile 92 steht i = pos, also ist dann auch i == 0. Somit ist die Bedingung in Zeile 101 erfüllt, du machst eine Ausgabe und verlässt die Schleife durch break.
 
T

thorstennn

Gast
Ich finde, dass das extrem umständlich programmiert ist. Der Grund wird wohl eine mangelnde Planung des ganzen mit Stift und papier sein ;D

Das wurde auch in dem anderen Thread angeregt und ich finde es gut.

Wieso setzt ihr euch nicht zusammen? - Ich hatte schon mehrfach angeboten dabei zu sein um zu helfen. ;)

Gruß Martin

P.S. Thorstenn ist ein gemeiner Forentrolll . Einfach ignorieren.

Das hat nix mit Troll zu tun, wenn ich gerne die ganze Aufgabenstellung hätte, sofern es die überhaupt gibt. Und für weiter Fragen ist es jawohl sinnvoll, in der richtigen Kategorie zu posten. :p

Anstatt alles in die main zu klatschen, gibt es jetzt ein Attribut textString und eine Intanzmethode printWordFreqStat, in der alles abläuft. Das ist vom Design her auch nicht viel besser.

Und damit man da Tipps geben kann, muss man die genau aufgabenstellung kennen. Manoman
 
J

Java-Fee

Gast
...um es mal in einem Post zu formulieren, ja, ich weiss, das die Programmierung nicht perfekt ist, auch weit umständlicher als ich es vorhatte, aufgrund mangelnder Zeit (das ist auch der Grund, warum ich mich nicht mit anderen zusammensetzen konnte) musste ich in Teilen auf ein vorgefertigtes Programm zurückgreifen, das mir aus der Vergangenheit zur verfügung stand.

Wie kann ich denn zumindest das mit der Schleife lösen? Reicht das, wenn ich die Schleifenbedingung umdrehe? Also den else if Teil voranstelle?
 
M

Marcinek

Gast
Java programmieren hat nix mit raten zu tun. (Höchstens "geschicktes" raten) ^^

Java:
import java.util.ArrayList;
import java.util.Collections;


public class Text {

	private String text= null;
	
	public Text(String pText) {
		this.text = pText;
	}

	public void printWordFreqStat() {
		// 1. Splitten
		String[] lTextSplit = this.text.split(" ");
		
		// 2. Zählarray aufmachen.
		ArrayList<Word> lWordListe = new ArrayList<Text.Word>();
		
		// 3. Zählen
		for(String lWord : lTextSplit) {
			this.handleWord(lWord, lWordListe);
		}
		
		// 4. Sortieren.
		Collections.sort(lWordListe);
		
		// 5. Ausgabe
		
		for(int i = 0; i < 10 && lWordListe.size() - i - 1> 0; i++) {
			Word lWord = lWordListe.get(lWordListe.size() - i - 1);
			System.out.println(lWord);
		}
	}
	
	private void handleWord(String pWord, ArrayList<Word> pWordListe) {
		boolean lWordExists = false;
		
		for(Word lWord : pWordListe) {
			if(lWord.getWord().equals(pWord)) {
				lWord.incFreq();
				lWordExists = true;
				break;
			}
		}
		
		if(!lWordExists) {
			pWordListe.add(new Word(pWord));
		}
	}

	private class Word implements Comparable<Word>  {
		private int freq = 1;
		private String word;
		
		public Word (String pWord) {
			this.word = pWord;
		}
		
		
		public void incFreq() {
			this.freq++;
		}
		
		public int getFreq() {
			return this.freq;
		}
		
		public void setWord(String word) {
			this.word = word;
		}

		public String getWord() {
			return word;
		}

		public int compareTo(Word arg0) {
			if(arg0 == null) {
				throw new NullPointerException("arg0 should not be null here..");
			}
			return this.freq - arg0.getFreq();
		}
		
		public String toString () {
			return this.word + " => " + String.valueOf(this.freq);
		}
		
	}
}

Sorry, aber ich kann mir das Dilema hier in dem Beitrag nicht weiter antun und möchte das hiermit beenden ^^
 
F

Firephoenix

Gast
Hi,
wenn man nur an den Leerstellen splittet sollte man aber die Aufgabenstellung nochmal prüfen.
Satzzeichen sind an sich nämlich keine Wörter, außer es ist vorgegeben, dass z.B. "Wort" ein anderes Wort ist als "Wort." und das wieder ein anderes ist als "Wort," :)
Gruß
 
M

Marcinek

Gast
Ja da hast du recht. - Aber die Änderung ist sehr trivial ;)

Fraglich ist auch, ob die genutzten API Funktionen auch verwendet werden dürfen oder nicht.
 
T

thorstennn

Gast
Evtl. kann man modifiziertes trim auf das Ergebnis von split anwenden, das dann die Satzzeichen entfernt, gefolgt von einem toLowerCase?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Vererbung Zugriff auf in der main erzeugten Distanz aus dritter Klasse Java Basics - Anfänger-Themen 5
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
N Problem bei Zugriff auf Textfelder Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben