Verschlüsselung+Skytale+Java

Moin,
für die Schule müssen wir eine Methode in Java schreiben, die Text wie eine 10 Kantige Skytale verschlüsselt. Ich hab bisher folgenden Code:
Code:
public class Verschluesselung
{   
    public char[]verschluesselnSkytala (String geheimSatz)
    {   int i=0, x=0, y=0, z=0, a=0, b=0;
        char[] geheimSatzII = geheimSatz.toCharArray();
        y=geheimSatzII.length;
        char verschluesselt[]=new char [y];
        while(i<=geheimSatzII.length)
        {   while (x<geheimSatzII.length)
            {   verschluesselt[x]=geheimSatzII[a];
                a++;
                x=x+10;
            } 
            if (x>geheimSatzII.length)
                {   z++;
                    x=z;
                                  
                }
            i++;
        }
        System.out.println("Ihr verschluesselter Satz: \n");
        while(b<verschluesselt.length)
        {   
            System.out.print((char)verschluesselt[b++]);
            
        }
        return verschluesselt;
    }
}

Wenn ich das durchlaufen lasse, werden zwar Zeichen verschoben, aber offensichtlich nicht alle, da manche Buchstaben fehlen und durch "Speichermüll" ersetzt worden sind. Meine Vermutung ist jetzt, dass die gar nicht verschoben werden weil in meinen Bedinungen irgendwo was falsch ist. Nur was ist falsch?!
Gruß
 
Hier meine Variante.
Du solltest ein char[][] benutzen.
hier mehr info über Skytala : Hier Klicken

Es geht darum eine matrize zu machen und dadrin die char rein zuschreiben und dann die senkrecht zurückzugeben.

beispiel : (für eine quatratische lösung der Skylata)

HALLO DU
-->
HAL
LO_
DU


_ : leerzeichen.
du bekommst zurück : HLDAOUL_

Für deinen "speziellen" Fall, musst du eine Matrize [x][10] machen.

Code:
class Verschluesselung {
    public static char[] verschluesselnSkytala (String geheimSatz) {
           int i,j, counter;
           int value = (int)Math.floor(geheimSatz.length() / 10) + 1;
           char[][] array = new char[value][10];
           char[] result = new char[geheimSatz.length()];
           i = j = counter = 0;
           while(i < value) {
             while((j < 10) && (counter < geheimSatz.length())) {
               array[i][j] = geheimSatz.charAt(counter);
               System.out.print(array[i][j]+" ");
               j++;
               counter++;
             }
             System.out.println("");
             j = 0;
             i++;
           }
           i = j = counter = 0;
           while(j < 10) {
             while((i < value) && (counter < geheimSatz.length())) {
               result[counter] = array[i][j];
               i++;
               counter++;
             }
             i = 0;
             j++;
           }
           
           
    return result;
}
    //test-section
    /*public static void main (String [] args) {
           System.out.println(verschluesselnSkytala("HALLOLEUTEWIEGEHTESEUCH"));
    } */
}



PS: wieso definierst du 10 Variablen wenn du nur 3 benutzen kannst ? du kannst die Variablen wieder initialisieren ^^

PS2 : Ich hab zwar nicht versucht rauszufinden was du falsch gemacht hast, aber die Zeilen 10, 11 und 12 scheinen mir sehr komisch zu sein.
jeder Schleinfedurchlauf machst du :
x += 10;
x ist der counter von deinem verschlüsselten Text.
richtiger wäre a += 10; (weil in deinen verschlüsselten text musst du haben : chatAt(1)chatAt(11)charAt(21).....charAt(2)charAt(22)......).
Du kriegst trotzdem keine richtige lösung raus.
 
Mit den Zeilen 10, 11 und 12 will ich das was in geheimSatzII[a] steht in verschluesselt[x] verschieben und dann soll x um 10 erhöt werden und a um eines. Dann soll das was in geheimSatzII[1] steht in verschluesselt[10] usw. verschoben werden. Ich denke mal dass das klar ist. Nur wo ist mein Logikfehler wenn z.B. der Satz "SendMoreTroops" so ausgegeben wird (ich habe vorher jeden Array von verschluesselt [] ein # zugewiesen)
Code:
SnMrT#####edoe

Wenn man aber genau 19 Zeichen zum verschlüsseln eingibt funktioniert es.
 
Zurück
Oben