ArrayList mit char- Array befüllen

HazlNut

Mitglied
Servus erst mal an alle!

hab jetzt mal mit der Suchfunktion anfangs gesucht aber nichts zu dem Thema gefunden.
Habe folgendes Problem:

Ich erstelle eine ArrayList die ich mit Chracter- Arrays befüllen möchte.

Java:
     ArrayList<Character[]> klarText = new ArrayList<Character[]>();

Des weiteren habe ich ein Losungswort der länge n, unter das ich einen Text schreibe der anhand des Losungswortes kodiert werden soll.
Der zu verschlüsselnde Text soll in char-arrays gespeichert werden, die die selbe länge haben wie das Losungswort. Nennt sich Doppelwürfel nach Leib oder so.

Meine Frage ist jetzt: Wie könnte ich jetzt die Arrays befüllen und dann in die ArraysList hinzufügen.
Vielleicht hab ich nur nen Knoten im Kopf und es ist eigentlich ganz einfach, aber aktuell keine Ahnung :-D

Bedanke mich schonmal für Hilfe und Antworten.

Lg HazlNut
 
Zuletzt bearbeitet:
da deine Arrays ja die Länge n haben ist es ja einfach:
Java:
//erstellen
Character[] a = new Character[n];

//fuellen
for (int = 0; i<a.lengthj; i++) {
    a[i] = ;//Wert muss eben ermittelt werden
}

//adden
klarText.add(a);
 
Zuletzt bearbeitet:
Ich habe jetzt eben folgendes hinbekommen:

Java:
ArrayList<Character[]> klarText = new ArrayList<Character[]>();
		
		Character[] rest = new Character[restArrayLaenge];
		
		int textI = 0;
		
		for(int i = 0; i<anzahlArray; i++){
			klarText.add(new Character [sortiert.length]);
			for(int j = 0; j<sortiert.length; j++){
				klarText.get(i)[j]= text.charAt(textI);
				textI += 1;
			}
		}
		klarText.add(rest);
		for(int i = 0; i<restArrayLaenge; i++){
			klarText.get(anzahlArray+1)[i] = text.charAt(textI);
			textI += 1;
		}

Das Ding ist, die Anzahl der Arrays hängt ja von der länge des Losungswortes und der Länge des Textes ab: In meinem Beispiel ist jetz zb das Losungswort "SCHWARZWALD" und den Text den ich erst mal so drin habe hat 73 Zeichen. Sprich: Ich brauche 6 Arrays der länge "SCHWARZWALD" und noch ein zusätzliches mit der länge 7, da text.length%"SCHWARZWALD".length.

Würdet ihr das genauso lösen wie hier, oder gibts da was besseres?

Wobei ich auch gerade sehe, dass der Code oben noch net richtig ist 🙂
 
Zuletzt bearbeitet:
Moin,

Würdet ihr das genauso lösen wie hier ?
Wobei ich auch gerade sehe, dass der Code oben noch net richtig ist 🙂
Wenn nicht richtig ist, dann wohl erher nicht ..... :lol:

So, und nun erkläre dies
Das Ding ist, die Anzahl der Arrays hängt ja von der länge des Losungswortes und der Länge des Textes ab: In meinem Beispiel ist jetz zb das Losungswort "SCHWARZWALD" und den Text den ich erst mal so drin habe hat 73 Zeichen. Sprich: Ich brauche 6 Arrays der länge "SCHWARZWALD" und noch ein zusätzliches mit der länge 7, da text.length%"SCHWARZWALD".length.
bitte noch mal verständlich!

Wieso brauchst Du bei "SCHWARZWALD" sechs Arrays mit dieser Länge ???:L

Gruß
Klaus
 
Da mir der Algorithmus nicht geläufig ist, ist es auch schlecht mit detaillierter Hilfe. Wie du Arrays erstellst und wie du sie der Liste hinzufügst und füllst weisst du ja nun 🙂
 
Sorry wenn ich mich bisschen unklar ausdrücke :lol:
Ich kopier einfach mal die Erklärung zu diesem Doppelwürfel:

"Geheimer Bestandteil des Verfahrens ist ein Losungswort (im Beispiel "Schwarzwald"). Man
sortiert die Buchstaben des Losungswortes nach dem Alphabet, nummeriert sie durch und schreibt
unter jeden Buchstaben des Losungswortes seine so ermittelte Nummer. Das ergibt die sogenannte
Zahlenlosung; es handelt sich um eine Permutation der Zahlen von 1 bis n, wobei n die Länge des
Losungswortes ist." Im Beispiel lautet die Zahlenlosung (8 3 5 9 1 7 11 10 2 6 4), in Ihrer Lösung
nummerieren Sie die Spalten von 0 bis n-1, nehmen also die Permutation (7 2 4 8 0 6 10 9 1 5 3)."

Danach schreibt man seinen text unter diese Zahlenlosung und nimmt zuerst alle Buchstaben die unter 1 (bzw 0) stehen, dann alle Buchstaben die unter 2 stehen, usw.
BSP:

7 2 4 8 0 6 10 9 1 5 3
H a l l o w i e g e h
t e s d i r

würde dann zum Geheimtext: "oigaehlsewrhtldei"

Das ganze soll sich "Doppelwürfel nach Leib" nennen soweit ich weiß.

Ich hatte jetz einfach mal einen Text mit 73 Zeichen. Schwarzwald hat 11 Buchstaben. Deswegen kann ich 6 Arrays mit der länge 11 erstellen und das letzte Array muss eben nur die länge 7 haben, da 7 Buchstaben übrig bleiben.

Ich hoffe ich kann es halbwegs erklären um was es geht. Wir hatten selbst sehr große Probleme diese Aufgabe zu verstehen 😳 :lol:
 
Zuletzt bearbeitet:
Java:
       int restArrayLaenge = text.length()% sortiert.length;
		int anzahlArray = text.length()/sortiert.length;
		
		ArrayList<Character[]> klarText = new ArrayList<Character[]>();
		
		Character[] rest = new Character[restArrayLaenge];
		
		int textI = 0;
		
		for(int i = 0; i<anzahlArray; i++){
			klarText.add(new Character [sortiert.length]);
			for(int j = 0; j<sortiert.length; j++){
				klarText.get(i)[j]= text.charAt(textI);
				textI += 1;
			}
		}
		klarText.add(rest);
		for(int i = 0; i<restArrayLaenge; i++){
			klarText.get(anzahlArray)[i] = text.charAt(textI);
			textI += 1;
		}

Das hab ich jetzt soweit und passt auch. Müsste jetz die kodierung starten aber hab gerade noch kein Plan wie das gehen soll 😀
 
Kodierung ist ja quasi:
Suche die stellt X im Permutationsarray wo [x] = 0
Dann schreibe text.getCharAt(x) an das klarText.get(i)[j]

korrekt?
Was genau ist sortiert? Du sortierst ja das Wort Schwarzwald nicht, du ermittelst lediglich die Indizes der aufsteigenden Buchstabenreihenfolge.

Für mich ist das hier noch verkehrt, oder habe ich ein Brett vorm Kopf
Java:
//was soll textI sein
for(int j = 0; j<sortiert.length; j++) { 
    klarText.get(i)[j]= text.charAt(textI);
    textI += 1;
}
Du schreibst hier quasi unkodiert den Text ins Array oder?
 
textI zeigt praktisch immer auf die i'te Stelle im Text der kodiert werden soll. Damit man halt alle Buchstaben aus dem Text in die Arrays bekommt.
Oder hab ich das vielleicht etwas zu kompliziert gemacht?

Und beim Kodierverfahren hatte ich die gleiche idee wie du, aber aktuell echt nen dicken Knoten im Kopf und komm nicht weiter 😀
 
Vielleicht irgendwas in diese Richtung?

Java:
	StringBuilder geheimText = new StringBuilder();
		int indexText = 0;
		
		for(int i = 0; i<anzahlArray; i++){
			for(int j = 0; j<sortiert.length; j++){
				while(klarText.get(i)[j] != i){
					indexText += 1;
				}
				geheimText.append(klarText.get(i)[j]);
			}
		}
 
Die Optimierung sei dir Überlassen 🙂

Java:
public static void main(String[] args) {                
	int[] permutation = {7,2,4,8,0,6,10,9,1,5,3};
	String klarText = "Hallo wie geht es dir?";
	
	ArrayList<Character[]> splittedText = new ArrayList<Character[]>();
	
	klarText = klarText.replaceAll("\\s+", "");
	int lengthKlarText = klarText.length();
	int lengthPermutation = permutation.length;
	int numberOfArrays =  (lengthKlarText / lengthPermutation) + 1;
	int finalArrayLength = lengthKlarText % lengthPermutation;
			
	int index = 0;
	int[] indicesOfSortedPermutIndices = new int[lengthPermutation];
	while (index < lengthPermutation) {
		for (int k=0; k<lengthPermutation; k++) {
			if (permutation[k] == index) {
				indicesOfSortedPermutIndices[index] = k;
				break;
			}
		}			
		index++;
	}	
	//==> indicesOfSortedPermutIndices = {4,8,1,10,2,9,5,0,3,7,6}
	
	
	//store text in arrays
	for (int i=0; i<numberOfArrays; i++) {
		Character[] nextArray;
		if (i == (numberOfArrays-1)) {
			nextArray = new Character[finalArrayLength];
		} else {
			nextArray = new Character[lengthPermutation];
		}
		
		for (int j=0; j<nextArray.length; j++) {
			nextArray[j] = klarText.charAt(j + (i*lengthPermutation));
		}
		
		splittedText.add(nextArray);
	}
	
	//print splitted text	
	for (int i=0; i<lengthPermutation; i++) {
		for (Character[] chars: splittedText) {
			if (chars.length > indicesOfSortedPermutIndices[i])
				System.out.print(chars[indicesOfSortedPermutIndices[i]]);
		}
	}
}

//=>> oigaehlsewrHtldei?
 
Zuletzt bearbeitet:

Zurück
Oben