Datentypen Hauefigkeit feststellen

pisco

Bekanntes Mitglied
Hey Leute,
ich hab mir diesen Java Code geschrieben um eine Häufigkeitsanalyse von einem verschlüsselten Code zu erzeugen. Nur hab ich beim Compilieren 28 Fehler bekommen... Es soll an der foreach Schleife liegen. Naja fragt sich nur warum?

Java:
import java.util.*;

public class hauefigkeitsanalyse {
	
	public static void main(String[] args) {
		
		String[] text = {"esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal "};
		String[] alphabet ={ a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z};
		int count=0;
		
		//das gesamte Alphabet
		
		for(int i =0; i=<text.length; i++;) {
			for(int j=0; j<alphabet.length; j++;) {
				if(text[i]==alphabet[j]) {
					count++;
				}	
			}
			System.out.println(text[i] + count );
		}
		
		//Anfangs&Endbuchstabenhauefigkeit
		char[] endtext;
		char[] anftext
		for(int k; k<text.length; k++){
			if(text[k]==" ")
				endtext = text[k+1];// alle anfangsbuchstaben
			
			if(text[k]==" ")
				anftext = text[k-1];//alle endbuchstaben
		}
		
		for(int m=0; m<endtext.length; m++){
			for(n=0; n<alphabet.length; n++){
				if(endtext[m]==alphabet[n]);
					counter++;
			}
			System.out.println(endtext[m] + count );
			
		}

		for(int a=0; a<anftext.length; a++){
			for(b=0; b<alphabet.length; b++){
				if(anftext[a]==alphabet[b]);
					counter++;
			}
			System.out.println(anftext[a] + count );
			
		}
		
		//END

	}
}

Habt ihr vll eine Ahnung voran das liegt?

lg
 
Zuletzt bearbeitet:

pisco

Bekanntes Mitglied
hey danke für deine Antowort,

ich wollte einfach die 2 Arrays vergleichen eines mitn Alphabet und eines mitn verschlüsselten Text.

Ich versteh grad ned was du meinst mit: Kann ned funktionieren?

lg

PS.: is es vll besser wenn ich 2 char arrays mache statt dem String array?
 
Zuletzt bearbeitet:

JimPanse

Bekanntes Mitglied
Final_Striker meinte damit, dass das
String[] alphabet ={ a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z};
lg
nicht funktionieren kann weil Strings wenn dann in hochkomma "" gesetzt werden müssen!

Sinnvoller wäre es wenn du Text, denn du untersuchen möchtest, einfach nur als einen String nimmst (keine Array) und die Häufigkeit über den Ascii code (ASCII-Tabelle) der einzelnen Zeichen zählst.
 

pisco

Bekanntes Mitglied
Hey,
vielen dank für deine Antwort

also ich hab eine Menge von dem Code gelöscht da ich finde ich sollte es besser schrittweise angehen:

Java:
import java.util.*;

public class hauefigkeitsanalyse {
	
	public static void main(String[] args) {
		
		String[] text = {"esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal "};
		String[] alphabet ={ "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};
		int count=0;
		
		//das gesamte Alphabet
		
		for(int i =0; i=<text.length; i++;) {
			for(int j=0; j<alphabet.length; j++;) {
				if(text[i].equals(alphabet[j])) {
					count++;
				}	
			}
			System.out.println(text[i] + count );
		}
		
		
		//END

	}
}

Leider verbergen sich immer noch 8 Fehler im Code:

hauefigkeitsanalyse.java:13: > expected
for(int i =0; i=<text.length; i++; ) {
^
hauefigkeitsanalyse.java:13: ';' expected
for(int i =0; i=<text.length; i++; ) {
^
hauefigkeitsanalyse.java:13: illegal start of expression
for(int i =0; i=<text.length; i++; ) {
^
hauefigkeitsanalyse.java:13: illegal start of expression
for(int i =0; i=<text.length; i++; ) {
^
hauefigkeitsanalyse.java:13: ';' expected
for(int i =0; i=<text.length; i++; ) {
^
hauefigkeitsanalyse.java:14: ')' expected
for(int j=0; j<alphabet.length; j++; ) {
^
hauefigkeitsanalyse.java:14: illegal start of expression
for(int j=0; j<alphabet.length; j++; ) {
^
hauefigkeitsanalyse.java:26: class, interface, or enum expected
}
^
8 errors

Immer dort wo ich ein Array durchgehen will? Was soll da falsch sein?

btw. wenn ich diese mit der ASCI Tabelle vergleichen würde, was wäre den der Ansatz dafür.
Ich hät gemacht.
Alle zeichen in ein Array und dann vergleichen, oder?

lg und danke für deine Antwort
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
<=
for(int i =0; i=<text.length; i++; )

Mehr Leerzeichen könnte das zu erkennen helfen.
Zudem sind das recht komische Arrays. Was helfen die, wenn sie nur 1 Feld besitzen? (Und nicht als Wrappler dienen)
Du könntest in einer HashMap zählen. Also den Char immer mit der gefundenen Anzahl verknüpfen.
 

pisco

Bekanntes Mitglied
Hey danke,

also wie gesagt ich versuche halt diesen verschlüsselten Text zu entschlüsseln und Speichere das ganze in ein Array.

Oder gibts da noch einen einfacheren Weg?

lg

PS.:
Jetz meldet er die for Schleife als falsch... lol... schön langsam macht mich mein PC fertig...
Java:
import java.util.*;

public class hauefigkeitsanalyse {
	
	public static void main(String[] args) {
		
		String[] text = {"esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal "};
		String[] alphabet ={ "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};
		int count=0;
		
		//das gesamte Alphabet
		
		for(int i =0; i<= text.length; i++; ) {
			for(int j=0; j<= alphabet.length; j++; ) {
				if(text[i].equals(alphabet[j])) {
					count++;
				}	
			}
			System.out.println(text[i] + count );
		}
		
		
		//END
		
	}
}

hauefigkeitsanalyse.java:13: ')' expected
for(int i =0; i<= text.length; i++; ) {
^
hauefigkeitsanalyse.java:13: illegal start of expression
for(int i =0; i<= text.length; i++; ) {
^
hauefigkeitsanalyse.java:14: ')' expected
for(int j=0; j<= alphabet.length; j++; ) {
^
hauefigkeitsanalyse.java:14: illegal start of expression
for(int j=0; j<= alphabet.length; j++; ) {
^
4 errors
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Java:
String[] text = {"esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal "};

Das ist ein String.

Java:
String[] text = { "esaosx", "ysnift lagsval mqc lsvo if mysm bgsea", "kaeshoa ya ysl sfmieibsmal"};

Ich denke, das wäre sinnvoller.

Was aber im Endeffekt sowieso quatsch ist, das du immer die Felder vergleichst. Und esaosx wird niemals gleich a, b, c, d etc sein.
Schau dir mal toCharArray oder charAt an.

Jetz meldet er die for Schleife als falsch... lol... schön langsam macht mich mein PC fertig...

Du ihm sicher auch. Du hast einen 2. Fehler drin, den ich oben fett markiert habe. (Ich weiß, nicht deutlich zu sehen)
 

pisco

Bekanntes Mitglied
Hey

ich dank euch für eure Hilfe. Ich hab alles geändert wie ihr mir empfohlen habt:

Java:
import java.util.*;

public class hauefigkeitsanalyse {
	
	public static void main(String[] args) {
		
		String text = "esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal";
		String[] alphabet ={ "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
		int count=0;
		
		char[] atext = text.toCharArray();
		
		for(int i =0; i<= atext.length; i++ ) {
			for(int j=0; j<= alphabet.length; j++ ) {
				if(alphabet[j].equals(charAt(atext[i]))) {
					count++;
				}	
			}
			System.out.println(atext[i] + count );
		}
		
		
		//END
		
	}
}

Naja einen Fehler gibts trotzdem...
Java:
hauefigkeitsanalyse.java:15: cannot find symbol
symbol  : method charAt(char)
location: class hauefigkeitsanalyse
				if(alphabet[j].equals(charAt(atext[i]))) {
				                      ^
1 error

Mein Pc akzeptiert die equals Methode ned...
 

Volvagia

Top Contributor
charAt ist eine Methode von String und nicht von Object, die ein einzelnes Zeichen ausgibt. Also so wie toCharArray, nur ohne dem Array.
Und equals kannst du nur auf Objekten anwenden. Deshalb mein Vorschlag, mache Alphabet zu einen Char-Array, und vergleiche mit ==
 

pisco

Bekanntes Mitglied
gut kompiliert habs ich und war komplett erleichtert, aber dann beim "java haufigkeits" ausführen

bekam ich eine ArrayIndexOutOfBoundsException... wtf^^

mein code.
Java:
import java.util.*;

public class hauefigkeitsanalyse {
	
	public static void main(String[] args) {
		
		String text = "esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal";
		String aalphabet = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
		int count=0;
		
		char[] atext = text.toCharArray();
		char[] alphabet = aalphabet.toCharArray();
		
		for(int i =0; i<= atext.length; i++ ) {
			for(int j=0; j<= alphabet.length; j++ ) {
				if(alphabet[j] == atext[i]) {
					count++;
				}	
			}
			System.out.println(atext[i] + count );
		}
		
		
		//END
		
	}
}

Java:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 51
	at hauefigkeitsanalyse.main(hauefigkeitsanalyse.java:16)

dank dir schonmal im Vorraus für deine Hilfe

PS.: Ein kleiner Research hat ergeben ,dass ich "Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array. "

mhmm aber ich geh das Array doch nur der Länge nach durch ,da issch doch kein illergal index dabei, oder?
 
Zuletzt bearbeitet:

Illuvatar

Top Contributor
Warum hast du jetzt das verbesserte wieder rückgängig gemacht?
Java:
String aalphabet = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
char[] alphabet = aalphabet.toCharArray();
Das ist Unfug, dein [c]alphabet[/c] enthält danach ne ganze Menge Kommas...

Edit: Wobei, es ist doch besser als vorher, weil du jetzt chars hast. Nimm einfach die Kommas raus, dann passt das.

Die ArrayIndexOutOfBoundsException kommt davon, dass du in der for-Schleife "<" statt "<=" machen solltest.
 

pisco

Bekanntes Mitglied
Hey ich dank euch Leute,
endlich hab ich die Häufigkeiten, zwar noch unstrukturiert aber immer hin

mein fertiger code ;D

Java:
import java.util.*;

public class hauefigkeitsanalyse {
	
	public static void main(String[] args) {
		
		String text = "esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal";
		String aalphabet = "abcdefghijklmnopqrstuvwxyz";
		int count=0;
		
		char[] atext = text.toCharArray();
		char[] alphabet = aalphabet.toCharArray();
		
		for(int i =0; i< atext.length; i++ ) {
			for(int j=0; j< alphabet.length; j++ ) {
				if(alphabet[j] == atext[i]) {
					count++;
				}	
			}
			System.out.println(atext[i] + count );
		}
		
		
		//END
		
	}
}

vielen dank euch allen nochmals
 

Illuvatar

Top Contributor
Leider ist mir grade aufgefallen: Ersetz mal Zeile 20 durch
Java:
System.out.println(atext[i] + ":" + count );
dann siehst du, dass das inhaltlich leider... nicht perfekt ist ;)

Ich hab dir hier einfach mal einen Alternativvorschlag zum drüber nachdenken:
Java:
public class Hauefigkeitsanalyse {

    public static void main(String[] args) {

        String textString = "esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal";
        char[] text = textString.toCharArray();

        for (char letter = 'a'; letter <= 'z'; letter++) {
            int count = 0;
            for (int i = 0; i < text.length; i++) {
                if(text[i] == letter) {
                    count++;
                }
            }
            System.out.println(letter + ": " + count);
        }

    }
}

Bevor jemand auf falsche Gedanken kommt: Wir machen hier immer noch keine Hausaufgaben, aber nach 3 Stunden Arbeit an der ersten Frage fand ich das ok.
 
Zuletzt bearbeitet:

pisco

Bekanntes Mitglied
Ok dank dir für deine Antwort

mein Programm spukt nämlich verdammt komische Zahlen aus...

Also ich find die Lösung mit

Java:
for (char letter = 'a'; letter <= 'z'; letter++) {...}

extremst cool. Hab gar ned gewusst das ich das Alphabet so einfach durch iterieren kann ;D. Kannst du mir vll auch noch erklären warum das so einfach geht, schließlich ist mein startwer ein 'a'...

ich habs jetz so gemacht:
Java:
import java.util.*;

public class hauefigkeitsanalyse1 {
	
	public static void main(String[] args) {
		
		String text = "esaosx, ysnift lagsval mqc lsvo if mysm bgsea, kaeshoa ya ysl sfmieibsmal";
		String aalphabet = "abcdefghijklmnopqrstuvwxyz";
		int count=0;
		
		char[] atext = text.toCharArray();
		char[] alphabet = aalphabet.toCharArray();
		
		
		for(int i =0; i< alphabet.length; i++ ) {
			count=0;
			for(int j=0; j< atext.length; j++ ) {
				if(alphabet[i] == atext[j]) {
					count++;
				}	
			}
			
			System.out.println(alphabet[i] + ":" + count );;
		}
		
		//END
	}
}

PS.: Ich hätte der Übung halber noch *-Sterne drangemacht . Geht das vll auch so einfach mit '*' * count ?
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Chars stehen für die Ascii-Nummern als int. Und die sind eben nacheinander angeordnet. a ist ein 97, b 98, c 99 usw. Zwischen chars und ints umzucasten bzw. mit chars wie mit ints zu rechnen ist kein Problem.
 

Illuvatar

Top Contributor
Das mit den Sternen versteh ich gerade nicht. Meinst du, dass auch noch Sterne im Text gezählt werden sollen?
Dafür kannst du bei deiner Lösung ja einfach noch den Stern zum Alphabet-String hinzufügen. Bei meiner Variante geht das nicht mehr so leicht.
 

JimPanse

Bekanntes Mitglied
Hi,

also noch einfacher und auch für andere Zeichen als das alphabetische anwendbar wäre wenn du:

Java:
// feld für die 128 Zeichen der ASCII-Tabelle
int [] counts = new int[128];

for(int i = 0; i < counts; i++){
//counter zurück setzen
counts [i] = 0;
}

String text = "lalsals isdossdpfposdpfsdofido4434 43341?asas 11fosdfp";

for(int i = 0; i < text.length; i++){
// char als ASCII repräsentation holen 
int aChar = (int) text.charAt(i);

//char erhöhen
counts [aChar]++;
}

for(int i =0; i < counts.length; i++){

if(counts[i] == 0) continue;

System.out.println( "Zeichen [" + ((char)i) +"]  ist "+counts[i]+" mal enthalten");
}

Ist aber nicht getestet aber sollte funktionieren!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
M Aufrufendes Objekt feststellen Java Basics - Anfänger-Themen 9
T Erste Schritte Ende von Wörtern in einer Zeile feststellen? Java Basics - Anfänger-Themen 5
Y Feststellen ob ein Jahr vergangen ist Java Basics - Anfänger-Themen 6
A Feststellen ob Desktop.print("*.pdf") fertig ist Java Basics - Anfänger-Themen 6
E Position erkennen und überlappungen feststellen Java Basics - Anfänger-Themen 4
C Monotonie feststellen Java Basics - Anfänger-Themen 12
N OOP gewinner in einem Spiel feststellen Java Basics - Anfänger-Themen 4
H Eclipse: Programm startet nicht, wie Fehler feststellen? Java Basics - Anfänger-Themen 5
M Obsolete Komponenten feststellen? Java Basics - Anfänger-Themen 3
G Feststellen, was ausgelöst wurde Java Basics - Anfänger-Themen 2
G Feststellen, ob erstes Zeichen eines Strings eine Ziffer ist Java Basics - Anfänger-Themen 11
R Verzeichnis feststellen Java Basics - Anfänger-Themen 14
W Zeilenposition in JTextArea feststellen(ohne Caret) Java Basics - Anfänger-Themen 7
G Länge einer Enumeration feststellen Java Basics - Anfänger-Themen 15
M Feststellen, das Textboxen leer sind! Java Basics - Anfänger-Themen 3
M Text in JInternalFrames - Source feststellen? Java Basics - Anfänger-Themen 6
B Disconnect des Clients feststellen Java Basics - Anfänger-Themen 2
reibi Feststellen ob Datei fertiggeschrieben ist. Java Basics - Anfänger-Themen 12
L feststellen ob args[2] gesetzt ist? Java Basics - Anfänger-Themen 2
G Änderungen in TextFelder feststellen Java Basics - Anfänger-Themen 4
R Integerwerte von enum-Elementen feststellen Java Basics - Anfänger-Themen 2
D zeilenumbruch feststellen Java Basics - Anfänger-Themen 8
T Feststellen wie viel Arbeitsspeicher belegt ist Java Basics - Anfänger-Themen 2
G Vergleichen von Objekten, selektiertes Objekt feststellen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben