# Text-Statistik Aufgabe mit Klassen



## WannaBeEngineer (26. Jun 2011)

Hallo alle zusammen. Ich habe eine Hausaufgabe aufbekommen in Java hab mich hier auch schon umgeguckt und gesehen das viele andere aus meinem Kurs Probleme haben ich will jetzt auch nicht ein neue Thread erstellen obwohl hier schon viele existieren aber mir bleibt nichts anderes übrig weil ich sehe das jeder einen anderen Lösungsweg hat. Wie schon mehrmals hier erwähnt hatten wir diese Aufgabe schon in Javascript aber da Javascript alle Variablen auf einen Haufen wirft und mit "var" deklariert muss man beim Anpassen der Aufgabe auf Java vieles ändern. Ich will hier nicht viele verschiedene Codes einfügen und den überblick verlieren sondern ich möchte erstmal den Javascript-Code in Java umwandeln und erst anschließend alles in Klassen packen. Aufgabestellung kurz und knapp:

Text(String) soll nach Alphabet sortiert werden dann sollen die Wörter nach Häufigkeit sortiert werden und die zehn Häufigsten sollen ausgegeben werden.

Eine main-Klasse Aufgabe_8.

Eine Klasse Text mit Attributen und Methoden, die zur Darstellung und Verarbeitung von Texten gehören.

Eine Klasse SelectionSort mit Attributen und Methoden, die für das Selection-Sort-Verfahren verwendet werden.

mein Code:


```
import java.util.Arrays;
import java.util.*;

public class Aufgabe_8{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		String[] wortArray = einstring.split(" ");//string in array umwandeln
		
		for(int i=0;i<wortArray.length;i++){//satzzeichen rausfiltern und die woerter mit kleinbuchstaben an das array uebergeben
			wortArray[i]=normalisiertesWort(wortArray[i]);
		}
		System.out.println(i);//anzahl der woerter die im text vorkommen sind in i gespeichert
		
		wortArray.sort();//sortieren nach alphabet
		int k=1;
		String[] array=new String[wortArray.length];
		int p=0;
		for(int j=0;j<wortArray.length;j++){//ermitteln wie oft die einzelnen woerter vorkommen
			if(wortArray[j]==wortArray[j+1]){
				k++;
			}
			else{//uebergeben der werte an ein 2 dimensionales array
				array[p]=new String[2];
				array[p][0]=wortArray[j];
				array[p][1]=k;
				p++;
				k=1;
			}
		}
		String tausch1, tausch2;//dreieckstausch damit kein wert verloren geht
		boolean unsortiert=true;
		while(unsortiert){//bubblesort: falls unsortiert true lautet macht er weiter bis das array komplett sortiert ist
			unsortiert=false;//falls er nichts tauscht geht er aus der while schleife raus weil unsortiert=false ist
			for(p=0;p<array.length-1;p++){//er geht das array durch bis er was findet und tauscht es dann
				if(array[p][1]<array[p+1][1]){
					tausch1=array[p+1][1];
					tausch2=array[p+1][0];
					array[p+1][1]=array[p][1];
					array[p+1][0]=array[p][0];
					array[p][1]=tausch1;
					array[p][0]=tausch2;
					unsortiert=true;//falls er was tauscht beginnt das prozedere von vorne um zu ueberpruefen ob alles sortiert ist wenn nicht tauscht er wieder bis unsortiert=false ist
				}
			}
		}

		public static String normalisiertesWort(String a) {//woerter aus dem text rausfiltern 
			char satzZeichen = "\",;:.!?-";  //herauszufilternde Zeichen
			char w = ""; 
			a = a.toLowerCase();  // Umwandlung in Kleinbuchstaben
			for (int i=0; i < a.length; i++) { 
				if (satzZeichen.indexOf( a.charAt(i)) == -1) {  // kein Satzzeichen 
					w = w + a.charAt(i);  // also in den Wortstring uebernehmen
				} 
			} 
			return w;
		}
	}
}
```

Ich habe alles umgeschrieben nur ist noch nicht alles richtig. In der Methode normalisiertesWort werden mir noch Fehler ausgegeben ich weiß aber nicht woran das liegt:bahnhof: könnt ihr mir bitte helfen. danke im voraus:toll:


----------



## Final_Striker (26. Jun 2011)

```
public static String normalisiertesWort(String a) {
            char satzZeichen = "\",;:.!?-";  // das ist kein char sondern ein String
            char w = ""; // genauso, bei einen char gibt man so an = 'a';
            a = a.toLowerCase();  
            for (int i=0; i < a.length; i++) { // -> a.lenght()
                if (satzZeichen.indexOf( a.charAt(i)) == -1) {  
                    w = w + a.charAt(i);  
                } 
            } 
            return w;
        }
```


----------



## WannaBeEngineer (26. Jun 2011)

```
import java.util.Arrays;
import java.util.*;

public class Aufgabe_8{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		String[] wortArray = einstring.split(" ");//string in array umwandeln
		
		for(int i=0;i<wortArray.length;i++){//satzzeichen rausfiltern und die woerter mit kleinbuchstaben an das array uebergeben
			wortArray[i]=normalisiertesWort(wortArray[i]);
		}
		System.out.println(i);//anzahl der woerter die im text vorkommen sind in i gespeichert
		
		wortArray.sort();//sortieren nach alphabet
		int k=1;
		String[] array1=new String[wortArray.length];
		int[] array2=new int[wortArray.length];
		int p=0;
		for(int j=0;j<wortArray.length;j++){//ermitteln wie oft die einzelnen woerter vorkommen
			if(wortArray[j]==wortArray[j+1]){
				k++;
			}
			else{//uebergeben der werte an ein 2 dimensionales array
				array1[p]=wortArray[j];
				array2[p]=k;
				p++;
				k=1;
			}
		}
		String tausch1;
		int tausch2;//dreieckstausch damit kein wert verloren geht
		boolean unsortiert=true;
		while(unsortiert){//bubblesort: falls unsortiert true lautet macht er weiter bis das array komplett sortiert ist
			unsortiert=false;//falls er nichts tauscht geht er aus der while schleife raus weil unsortiert=false ist
			for(p=0;p<array2.length-1;p++){//er geht das array durch bis er was findet und tauscht es dann
				if(array2[p]<array2[p+1]){
					tausch1=array1[p+1];
					tausch2=array2[p+1];
					array1[p+1]=array1[p];
					array2[p+1]=array2[p];
					array1[p]=tausch1;
					array2[p]=tausch2;
					unsortiert=true;//falls er was tauscht beginnt das prozedere von vorne um zu ueberpruefen ob alles sortiert ist wenn nicht tauscht er wieder bis unsortiert=false ist
				}
			}
		}
	}

	public static String normalisiertesWort(String a) {//woerter aus dem text rausfiltern 
		String satzZeichen = "\",;:.!?-";  //herauszufilternde Zeichen
		String w = ""; 
		a = a.toLowerCase();  // Umwandlung in Kleinbuchstaben
		for (int i=0; i < a.length(); i++) { 
			if (satzZeichen.indexOf( a.charAt(i)) == -1) {  // kein Satzzeichen 
				w = w + a.charAt(i);  // also in den Wortstring uebernehmen
			} 
		} 
		return w;
	}
}
```

hatte noch paar erhebliche Fehler drin:shock: jetzt hab ichs wieder etwas verbessert aber es ist immer noch nicht alles richtig. Das a.length() ist mit () muss ich das bei den davorigen auch ändern z.B. wortArray.length ?


----------



## Marcinek (26. Jun 2011)

Hi,

das length() kommt von Collection während lenth von den nativen Arrays "Bla[]" kommt.

Letzteres ist kein Objekt an sich.

---

Hier sind nun drei? Leute, die exakt die gleiche Aufgabe bearbeiten. Wie wäre es, wenn man sich mal Zusammen setzt (Heute Möglich über Teamspeak etc) und dann das Problem löst.

Falls ihr einen Experten dabei haben wollt, ich bin um etwa 21 Uhr zu Hause 

Gruß,

Martin


----------



## WannaBeEngineer (26. Jun 2011)

mein Vater hat heute Geburtstag ich glaube wenn ich das Programm ohne Klassen zum Laufen bringe dann ist es nicht mehr so schwer das ganze in Klassen zu packen...ich wollte bis 20 Uhr bisschen was geschafft haben und morgen noch das ganze beenden wenn ich erstmal alle Fehler behoben habe.


----------



## WannaBeEngineer (26. Jun 2011)

ich versuch mich langsam durch die Fehler zu arbeiten vllt könnt ihr mir ja behilflich sein
hab etwas neues korrigiert
wortArray.sort() muss Arrays.sort(wortArray) heißen


----------



## WannaBeEngineer (26. Jun 2011)

mein korrigierter code sieht so aus:

```
import java.util.Arrays;
import java.util.*;

public class Aufgabe_8{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		String[] wortArray = einstring.split(" ");//string in array umwandeln
		
		for(int i=0;i<wortArray.length;i++){//satzzeichen rausfiltern und die woerter mit kleinbuchstaben an das array uebergeben
			wortArray[i]=normalisiertesWort(wortArray[i]);
		}
		//System.out.println(i);//anzahl der woerter die im text vorkommen sind in i gespeichert
		
		Arrays.sort(wortArray);//sortieren nach alphabet
		int k=1;
		String[] array1=new String[wortArray.length];
		int[] array2=new int[wortArray.length];
		int p=0;
		for(int j=0;j<wortArray.length-1;j++){//ermitteln wie oft die einzelnen woerter vorkommen
			if(wortArray[j]==wortArray[j+1]){
				k++;
			}
			else{//uebergeben der werte an ein 2 dimensionales array
				array1[p]=wortArray[j];
				array2[p]=k;
				p++;
				k=1;
			}
		}
		
		String tausch1;
		int tausch2;//dreieckstausch damit kein wert verloren geht
		boolean unsortiert=true;
		while(unsortiert){//bubblesort: falls unsortiert true lautet macht er weiter bis das array komplett sortiert ist
			unsortiert=false;//falls er nichts tauscht geht er aus der while schleife raus weil unsortiert=false ist
			for(p=0;p<array2.length-1;p++){//er geht das array durch bis er was findet und tauscht es dann
				if(array2[p]<array2[p+1]){
					tausch1=array1[p+1];
					tausch2=array2[p+1];
					array1[p+1]=array1[p];
					array2[p+1]=array2[p];
					array1[p]=tausch1;
					array2[p]=tausch2;
					unsortiert=true;//falls er was tauscht beginnt das prozedere von vorne um zu ueberpruefen ob alles sortiert ist wenn nicht tauscht er wieder bis unsortiert=false ist
				}
			}
		}
		for(int v=0;v<10;v++){
			System.out.println(array1[v]+" "+array2[v]);
		}
	}

	public static String normalisiertesWort(String a) {//woerter aus dem text rausfiltern 
		String satzZeichen = "\",;:.!?-";  //herauszufilternde Zeichen
		String w = ""; 
		a = a.toLowerCase();  // Umwandlung in Kleinbuchstaben
		for (int i=0; i < a.length(); i++) { 
			if (satzZeichen.indexOf( a.charAt(i)) == -1) {  // kein Satzzeichen 
				w = w + a.charAt(i);  // also in den Wortstring uebernehmen
			} 
		} 
		return w;
	}
}
```
Das Programm macht das was es soll bis auf das Sortieren des Arrays nach Häufigkeit der Wörter die im Text vorkommen!
also dieser Teil:

```
String tausch1;
		int tausch2;//dreieckstausch damit kein wert verloren geht
		boolean unsortiert=true;
		while(unsortiert){//bubblesort: falls unsortiert true lautet macht er weiter bis das array komplett sortiert ist
			unsortiert=false;//falls er nichts tauscht geht er aus der while schleife raus weil unsortiert=false ist
			for(p=0;p<array2.length-1;p++){//er geht das array durch bis er was findet und tauscht es dann
				if(array2[p]<array2[p+1]){
					tausch1=array1[p+1];
					tausch2=array2[p+1];
					array1[p+1]=array1[p];
					array2[p+1]=array2[p];
					array1[p]=tausch1;
					array2[p]=tausch2;
					unsortiert=true;//falls er was tauscht beginnt das prozedere von vorne um zu ueberpruefen ob alles sortiert ist wenn nicht tauscht er wieder bis unsortiert=false ist
				}
			}
		}
```


----------



## Final_Striker (26. Jun 2011)

http://www.java-forum.org/top-fragen/1350-vergleichen-strings.html


----------



## WannaBeEngineer (26. Jun 2011)

hahahahahaa:lol: ich habs gelöst und ich hab mich gewundert warum er die if anweisung nicht betritt dann dachte ich mir das er die strings nicht vergleicht trotzdem danke
also mein code lautet jetzt:


```
import java.util.Arrays;
import java.util.*;

public class Aufgabe_8{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		String[] wortArray = einstring.split(" ");//string in array umwandeln
		for(int i=0;i<wortArray.length;i++){//satzzeichen rausfiltern und die woerter mit kleinbuchstaben an das array uebergeben
			wortArray[i]=normalisiertesWort(wortArray[i]);
		}
		System.out.println("Anzahl der Woerter die im Text vorkommen="+wortArray.length);//anzahl der woerter die im text vorkommen sind in i gespeichert
		
		Arrays.sort(wortArray);//sortieren nach alphabet
		int z=1;
		for(int j=0;j<wortArray.length-1;j++){//ermitteln wie oft die einzelnen woerter vorkommen
			if(!(wortArray[j].equals(wortArray[j+1]))){
				z++;
			}
		}
		System.out.println("Anzahl der unterschiedlichen Woerter die im Text vorkommen="+z);
		
		
		int k=1;
		String[] array1=new String[wortArray.length];
		int[] array2=new int[wortArray.length];
		int p=0;
		for(int j=0;j<wortArray.length-1;j++){//ermitteln wie oft die einzelnen woerter vorkommen
			if(wortArray[j].equals(wortArray[j+1])){
				k++;
			}
			else{//uebergeben der werte an ein 2 dimensionales array
				array1[p]=wortArray[j];
				array2[p]=k;
				p++;
				k=1;
			}
		}
		
		String tausch1;
		int tausch2;//dreieckstausch damit kein wert verloren geht
		boolean unsortiert=true;
		while(unsortiert){//bubblesort: falls unsortiert true lautet macht er weiter bis das array komplett sortiert ist
			unsortiert=false;//falls er nichts tauscht geht er aus der while schleife raus weil unsortiert=false ist
			for(p=0;p<array2.length-1;p++){//er geht das array durch bis er was findet und tauscht es dann
				if(array2[p]<array2[p+1]){
					tausch1=array1[p+1];
					tausch2=array2[p+1];
					array1[p+1]=array1[p];
					array2[p+1]=array2[p];
					array1[p]=tausch1;
					array2[p]=tausch2;
					unsortiert=true;//falls er was tauscht beginnt das prozedere von vorne um zu ueberpruefen ob alles sortiert ist wenn nicht tauscht er wieder bis unsortiert=false ist
				}
			}
		}
		for(int v=0;v<10;v++){
			System.out.println(array1[v]+" "+array2[v]);
		}
	}

	public static String normalisiertesWort(String a) {//woerter aus dem text rausfiltern 
		String satzZeichen = "\",;:.!?-";  //herauszufilternde Zeichen
		String w = ""; 
		a = a.toLowerCase();  // Umwandlung in Kleinbuchstaben
		for (int i=0; i < a.length(); i++) { 
			if (satzZeichen.indexOf( a.charAt(i)) == -1) {  // kein Satzzeichen 
				w = w + a.charAt(i);  // also in den Wortstring uebernehmen
			} 
		} 
		return w;
	}
}
```
der nächste schritt wäre die verteilung des codes auf die klassen:rtfm: ich arbeite mich mal bisschen voran und melde mich dann wieder:toll: danke dir:applaus:


----------



## WannaBeEngineer (26. Jun 2011)

muss jede Klasse mindestens eine Methode besitzen?


----------



## Final_Striker (26. Jun 2011)

Nein, eine Klasse muss weder Attribute noch Methoden besitzen.


----------



## WannaBeEngineer (26. Jun 2011)

```
import java.util.Arrays;
import java.util.*;

public class Aufgabe_8{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		Text txt = new Text(einstring);
		txt.printWordFreqStat();
	}
}
public class Text{
	String[] wortArray = einstring.split(" ");
	for(int i=0;i<wortArray.length;i++){
		wortArray[i]=normalisiertesWort(wortArray[i]);
	}
	System.out.println("Anzahl der Woerter die im Text vorkommen="+wortArray.length);
	
	Arrays.sort(wortArray);
	int z=1;
	for(int j=0;j<wortArray.length-1;j++){
		if(!(wortArray[j].equals(wortArray[j+1]))){
			z++;
		}
	}
	System.out.println("Anzahl der unterschiedlichen Woerter die im Text vorkommen="+z);
	
		
	int k=1;
	String[] array1=new String[wortArray.length];
	int[] array2=new int[wortArray.length];
	int p=0;
	for(int j=0;j<wortArray.length-1;j++){
		if(wortArray[j].equals(wortArray[j+1])){
			k++;
		}
		else{
			array1[p]=wortArray[j];
			array2[p]=k;
			p++;
			k=1;
		}
	}
	public static void printWordFreqStat(){
		for(int v=0;v<10;v++){
			System.out.println(array1[v]+" "+array2[v]);
		}
	}

	public static String normalisiertesWort(String a) {
		String satzZeichen = "\",;:.!?-";
		String w = ""; 
		a = a.toLowerCase();
		for (int i=0; i < a.length(); i++) { 
			if (satzZeichen.indexOf( a.charAt(i)) == -1) {
				w = w + a.charAt(i);
			} 
		} 
		return w;
	}
}

public class SelectionSort{
	String tausch1;
	int tausch2;
	boolean unsortiert=true;
	while(unsortiert){
		unsortiert=false;
		for(p=0;p<array2.length-1;p++){
			if(array2[p]<array2[p+1]){
				tausch1=array1[p+1];
				tausch2=array2[p+1];
				array1[p+1]=array1[p];
				array2[p+1]=array2[p];
				array1[p]=tausch1;
				array2[p]=tausch2;
				unsortiert=true;
			}
		}
	}
}
```

ich komme nicht klar mit den Klassen und wie man sie mit der main verknüpft bzw aufruft! Kann mir da jemand weiterhelfen? ich hab schon vieles versucht aber kriege einen haufen von fehlermeldungen???:L
danke im voraus!


----------



## Jango (26. Jun 2011)

Final_Striker hat gesagt.:


> Nein, eine Klasse muss weder Attribute noch Methoden besitzen.



Und warum sollte man eine Klasse bauen, die etwa folgendes enthält:


```
public class Final_Striker{

    //nichts drin 

}
```


----------



## Final_Striker (26. Jun 2011)

Jango hat gesagt.:


> Und warum sollte man eine Klasse bauen, die etwa folgendes enthält:



Die Frage war, ob das geht, nicht ob das auch Sinn macht. ;-)


Und wenn schon, dann bitte :

```
public class FinalStriker{

    //nichts drin 

}
```

Wir wollen uns doch hier an die Code Convention halten. :-D

*EDIT*


```
public class SelectionSort{
    String tausch1;
    int tausch2;
    boolean unsortiert=true;
    while(unsortiert){ // <--
        ...
        }
    }
}
```

Und sowas geht natürlich nicht. Nur weil eine Klasse keine Methoden besitzen muss, bedeutet das nicht das du Code einfach in den Rumpf einer Klasse schreiben kannst.

Galileo Computing :: Java ist auch eine Insel – 5 Eigene Klassen schreiben


----------



## WannaBeEngineer (26. Jun 2011)

Kann ich Arrays als Attribute verwenden wenn ja wie?


----------



## Marcinek (26. Jun 2011)

Ich würde dies googeln.

Das ist für das Studium und die Forschung genrell wichtig sich seine Quellen selber zu suchen.

Galileo Computing :: Java ist auch eine Insel – 25.3 Attribute, Methoden und Konstruktoren


----------



## WannaBeEngineer (26. Jun 2011)

ich hab das nichts hilfreiches gefunden was arrays und attribute betrifft sorry:noe:
meine nächste version:rtfm:


```
import java.util.Arrays;
import java.util.*;

public class Aufgabe_8{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		Text txt = new Text(einstring);
		txt = new SelectionSort();
		txt.printWordFreqStat();
	}
}
public class Text{
	String array1;//attribut 1
	int array2;//attribut 2
	
	public static void texte(String einstring){
		String[] wortArray = einstring.split(" ");
		for(int i=0;i<wortArray.length;i++){
			wortArray[i]=normalisiertesWort(wortArray[i]);
		}
		System.out.println("Anzahl der Woerter die im Text vorkommen="+wortArray.length);
		
		Arrays.sort(wortArray);
		int z=1;
		for(int j=0;j<wortArray.length-1;j++){
			if(!(wortArray[j].equals(wortArray[j+1]))){
				z++;
			}
		}
		System.out.println("Anzahl der unterschiedlichen Woerter die im Text vorkommen="+z);
		
			
		int k=1;
		String[] array1=new String[wortArray.length];
		int[] array2=new int[wortArray.length];
		int p=0;
		for(int j=0;j<wortArray.length-1;j++){
			if(wortArray[j].equals(wortArray[j+1])){
				k++;
			}
			else{
				this.array1[p]=wortArray[j];//speichert er das komplette array1 als attribut so?
				this.array2[p]=k;//
				p++;
				k=1;
			}
		}
	}
	
	public static void printWordFreqStat(){
		for(int v=0;v<10;v++){
			System.out.println(array1[v]+" "+array2[v]);
		}
	}

	public static String normalisiertesWort(String a) {
		String satzZeichen = "\",;:.!?-";
		String w = ""; 
		a = a.toLowerCase();
		for (int i=0; i < a.length(); i++) { 
			if (satzZeichen.indexOf( a.charAt(i)) == -1) {
				w = w + a.charAt(i);
			} 
		} 
		return w;
	}
}

public class SelectionSort{
	public static void selection(){
		String tausch1;
		int tausch2;
		boolean unsortiert=true;
		while(unsortiert){
			unsortiert=false;
			for(p=0;p<array2.length-1;p++){
				if(array2[p]<array2[p+1]){
					tausch1=array1[p+1];
					tausch2=array2[p+1];
					array1[p+1]=array1[p];
					array2[p+1]=array2[p];
					array1[p]=tausch1;
					array2[p]=tausch2;
					unsortiert=true;
				}
			}
		}
	}
}
```

kann man mit this.array1 in einer schleife das komplette array1 als attribut speichern?


----------



## Marcinek (26. Jun 2011)

array1 ist ein Attribut.

Aber kein Array.

Java ist auch eine Insel – 3.8 Arrays


----------



## WannaBeEngineer (26. Jun 2011)

dann halt so:bae:

```
String[] array1;//attribut 1
int[] array2;//attribut 2
```

Ich dachte mir das ein String in die Klasse Text übergeben wird und zur Berechnung von array1,array2 beiträgt. Dann werden die nach Alphabet sortierten Arraystrings mit Festlegung der Häufigkeit in array1 und array2 als Attribut gespeichert und im Objekt txt festgehalten...richtig?


----------



## Marcinek (26. Jun 2011)

Wenn du sprechendere Namen für die Variablen nimmst, dann könnte man mehr damit anfangen 

Ich würde eine ArrayListe nehmen. Aber genau ab diesen Punkt ist auch schon in dem anderen Thread diskutiert worden.

Mal dir das doch mal auf dem Papier auf, wie es werden soll.

Durch dieses TryAndError wirst du noch Jahre brauchen bis du es hast.


----------



## WannaBeEngineer (26. Jun 2011)

Ich kann dir ja mal mein Quellcode ohne Klassen zeigen. Ich weiß nicht was Klassen bringen soll bei dieser Aufgabe ich habs ohne Klassen gelöst wie sollen mir Klassen das ganze vereinfachen die Erschweren mir  nur alles;(
Ich hab mir jetzt was zu Konstruktoren durchgelesen und ich hoffe ich habe es verstanden. Also ich kann ein Objekt erstellen und ihm z.B. wie hier einen String mitgeben. Der Konstruktor nimmt diesen String und verändert ihn. Konstruktoren brauchen keinen Rückgabewert. Das würde heißen das alles was ich mit meinem String mache letztendlich im Objekt gespeichert wird aber in welcher Form? Habe ich das richtig verstanden?

Das ist mein Quellcode ohne Klassen vielleicht kann ich es ja langsam umformen mit eurer Hilfe Schritt für Schritt damit ich nicht die ganze Zeit im dunklen tappe:


```
import java.util.Arrays;
import java.util.*;

public class Aufgabe{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		String[] wortArray = einstring.split(" ");//string in array umwandeln
		for(int i=0;i<wortArray.length;i++){//satzzeichen rausfiltern und die woerter mit kleinbuchstaben an das array uebergeben
			wortArray[i]=normalisiertesWort(wortArray[i]);
		}
		System.out.println("Anzahl der Woerter die im Text vorkommen="+wortArray.length);//anzahl der woerter die im text vorkommen sind in i gespeichert
		
		Arrays.sort(wortArray);//sortieren nach alphabet
		int z=1;
		for(int j=0;j<wortArray.length-1;j++){//ermitteln wie oft die einzelnen woerter vorkommen
			if(!(wortArray[j].equals(wortArray[j+1]))){
				z++;
			}
		}
		System.out.println("Anzahl der unterschiedlichen Woerter die im Text vorkommen="+z);
		
		
		int k=1;
		String[] array1=new String[wortArray.length];
		int[] array2=new int[wortArray.length];
		int p=0;
		for(int j=0;j<wortArray.length-1;j++){//ermitteln wie oft die einzelnen woerter vorkommen
			if(wortArray[j].equals(wortArray[j+1])){
				k++;
			}
			else{//uebergeben der werte an ein 2 dimensionales array
				array1[p]=wortArray[j];
				array2[p]=k;
				p++;
				k=1;
			}
		}
		
		String tausch1;
		int tausch2;//dreieckstausch damit kein wert verloren geht
		boolean unsortiert=true;
		while(unsortiert){//bubblesort: falls unsortiert true lautet macht er weiter bis das array komplett sortiert ist
			unsortiert=false;//falls er nichts tauscht geht er aus der while schleife raus weil unsortiert=false ist
			for(p=0;p<array2.length-1;p++){//er geht das array durch bis er was findet und tauscht es dann
				if(array2[p]<array2[p+1]){
					tausch1=array1[p+1];
					tausch2=array2[p+1];
					array1[p+1]=array1[p];
					array2[p+1]=array2[p];
					array1[p]=tausch1;
					array2[p]=tausch2;
					unsortiert=true;//falls er was tauscht beginnt das prozedere von vorne um zu ueberpruefen ob alles sortiert ist wenn nicht tauscht er wieder bis unsortiert=false ist
				}
			}
		}
		for(int v=0;v<10;v++){
			System.out.println(array1[v]+" "+array2[v]);
		}
	}

	public static String normalisiertesWort(String a) {//woerter aus dem text rausfiltern 
		String satzZeichen = "\",;:.!?-";  //herauszufilternde Zeichen
		String w = ""; 
		a = a.toLowerCase();  // Umwandlung in Kleinbuchstaben
		for (int i=0; i < a.length(); i++) { 
			if (satzZeichen.indexOf( a.charAt(i)) == -1) {  // kein Satzzeichen 
				w = w + a.charAt(i);  // also in den Wortstring uebernehmen
			} 
		} 
		return w;
	}
}
```

ich würde gerne alles so aufbauen das ich von der main in die Klasse Text ein String gebe den da benutze zwei Arrays bilde eins für das Wort und eins für die Häufigkeit die beiden Arrays der Klasse SelectionSort übergebe und sortiere und anschließend auf dem Bildschirm mit der Ausgabemethode  printWordFreqStat() ausgebe. Ist das so überhaupt möglich? Das mit ArrayList ist mir noch zu hoch:S
ich muss das Ganze bis morgen 23.55 Uhr abgeben und ich würde gerne diesen Punkt erhalten also bitte helft mir;(


----------



## WannaBeEngineer (27. Jun 2011)

ich hab jetzt ein paar stellen verrändert und bekomme keine hunderten Fehlermeldungen mehr aber das Problem ist das er nichts sinnvolles macht. Ich komm nicht mehr weiter hab mir soviel durchgelesen aber ich weiß nicht wo ich weitermachen soll. SelectionSort hab ich erstmal nicht eingebunden um den Fehlerbereich einzudämmen. Warum gibt er mir nichts aus bei der Methode printWordFreqStat()?


```
import java.util.Arrays;
import java.util.*;

public class Aufgabe_8{
	public static void main(String[]args){
		String einstring = "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. Sie sagten sich: \"Wir wollen es packen!\".";
		Text txt = new Text(einstring);
		txt.printWordFreqStat();
	}
}
class Text{
	public String[] array1;//attribut 1
	public int[] array2;//attribut 2
	
	public Text(String einstring){
		String[] wortArray = einstring.split(" ");
		for(int i=0;i<wortArray.length;i++){
			wortArray[i]=normalisiertesWort(wortArray[i]);
		}
		System.out.println("Anzahl der Woerter die im Text vorkommen="+wortArray.length);
		
		Arrays.sort(wortArray);
		int z=1;
		for(int j=0;j<wortArray.length-1;j++){
			if(!(wortArray[j].equals(wortArray[j+1]))){
				z++;
			}
		}
		System.out.println("Anzahl der unterschiedlichen Woerter die im Text vorkommen="+z);
		
			
		int k=1;
		String[] array1=new String[wortArray.length];
		int[] array2=new int[wortArray.length];
		int p=0;
		for(int j=0;j<wortArray.length-1;j++){
			if(wortArray[j].equals(wortArray[j+1])){
				k++;
			}
			else{
				this.array1[p]=wortArray[j];//speichert er das komplette array1 als attribut so?
				this.array2[p]=k;//
				p++;
				k=1;
			}
		}
	}
	
	public void printWordFreqStat(){
		for(int v=0;v<10;v++){
			System.out.println(array1[v]+" "+array2[v]);
		}
	}

	public static String normalisiertesWort(String a) {
		String satzZeichen = "\",;:.!?-";
		String w = ""; 
		a = a.toLowerCase();
		for (int i=0; i < a.length(); i++) { 
			if (satzZeichen.indexOf( a.charAt(i)) == -1) {
				w = w + a.charAt(i);
			} 
		} 
		return w;
	}
}

/*class SelectionSort{
	public static void selection(){
		String tausch1;
		int tausch2;
		boolean unsortiert=true;
		while(unsortiert){
			unsortiert=false;
			for(p=0;p<array2.length-1;p++){
				if(array2[p]<array2[p+1]){
					tausch1=array1[p+1];
					tausch2=array2[p+1];
					array1[p+1]=array1[p];
					array2[p+1]=array2[p];
					array1[p]=tausch1;
					array2[p]=tausch2;
					unsortiert=true;
				}
			}
		}
	}
}*/
```


----------



## Andi_CH (27. Jun 2011)

WannaBeEngineer hat gesagt.:


> ich hab jetzt ein paar stellen verrändert und bekomme keine hunderten Fehlermeldungen mehr aber das Problem ist das er nichts sinnvolles macht.



Da kannst du "ihm" nicht einmal böse sein, denn "Er" macht genau dasselbe wie du - nichts sinnvolles.

Nimm Stift und Papier und überleg dir, was er" denn machen müsste um sein Ziel zu erreichen ...

Man braucht für die ersten Schritte *keinen* Computer und schon gar keine Programmiersprache.
Draufloshacken ist halt eben nicht sinnvoll.


----------



## Marcinek (28. Jun 2011)

Maybe hilft das 

http://www.java-forum.org/java-basi...main-klasse-externe-klassen-3.html#post779319


----------



## Jango (28. Jun 2011)

Final_Striker hat gesagt.:


> Wir wollen uns doch hier an die Code Convention halten. :-D



Auch wenn ein Java - 'Entwickler' Fußpilz kriegt, wenn er sich an alt Hergegrachtes richten sollte.
Mann will ja immer alles anders machen als die Vorgänger, die immer noch die Softwareindustrie beherrschen.
Für mich ist und bleibt der Unterstrich ein Zeichen zu Gunsten der Übersichtlichkeit.

Deine Conventionen kannst du dir... ähm - du weißt schon wohin schieben...


----------



## Andi_CH (29. Jun 2011)

So lange es Leute gibt die sich nicht an die deutsche Grammatik halten, also "iwie" ihr "Prog" zum "funzen" bringen und "eh alles klein ohne satzzeichen also nahezu unleserlich schreiben", ist jede Art von Java-Konvention, vor allem wenn dadurch die Lesebarkeit leidet und Fehleranfälligkeit "gezüchtet" wird, hinfällig.

Ach ich vergass - die können das ja gar nicht anders und das macht mir "iwie" Angst vor der Zukunft.

Ja ich weiss, erstens behaupten die immer sie könnten schon wenn sie wollten, was sie aber nie beweisen und zweitens ist das OT, aber ich habe nicht einmal ein schlechtes Gewissen dabei.
(Vielleicht denken ja zwei darüber nach und bei einer/einem bewirkt es etwas und das wäre schon ein Erfolg)


----------



## Jango (1. Jul 2011)




----------



## thorstenthor (1. Jul 2011)

Andi_CH hat gesagt.:


> So lange es Leute gibt die sich nicht an die deutsche Grammatik halten, also "iwie" ihr "Prog" zum "funzen" bringen und "eh alles klein ohne satzzeichen also nahezu unleserlich schreiben", ist jede Art von Java-Konvention, vor allem wenn dadurch die Lesebarkeit leidet und Fehleranfälligkeit "gezüchtet" wird, hinfällig.
> 
> Ach ich vergass - die können das ja gar nicht anders und das macht mir "iwie" Angst vor der Zukunft.
> 
> ...



Ich will mich natürlich nicht streiten, aber Satzzeichen sind hier auch unzureichend gesetzt worden und nicht nur die in Anführungszeichen geschriebenen Wörter sind falsch.

Jango sollte das wissen.:rtfm:


----------



## Jango (1. Jul 2011)

thorstenthor hat gesagt.:


> Ich will mich natürlich nicht streiten, aber Satzzeichen sind hier auch unzureichend gesetzt worden und nicht nur die in Anführungszeichen geschriebenen Wörter sind falsch.
> 
> Jango sollte das wissen.:rtfm:



Das hab ich schon lange aufgegeben.


----------

