package chiffre;
/**
* AlgDs WS99 Uebungsblatt 4 Zusatzaufgabe "Code entziffern"
*
* Christian.Semrau@student.uni-magdeburg.de
* @author Christian Semrau, 28.11.1999
*/
class Matrixcode implements ChiffreInterface {
int matrixbreite;
int updown;
boolean set = false;
String eingabe;
String ausgabe;
int tmpbreite;
int len;
int rest;
int maxlen;
int[] spaltenleng;
int[] zeilenleng;
char[][] feld;
public String decode(String E) {
if (!set) return "";
eingabe = E;
vorarbeit();
// die Spalten fuellen
int pos=0;
for(int s=0; s=0; z--)
feld[s][z] = eingabe.charAt(pos++);
// Feld zeilenweise auslesen
String ausgabe = "";
for(int z=0; z=0; z--)
ausgabe += feld[s][z];
return ausgabe;
}
/**
*
*/
public void setKey(String s) {
if (s==null||s.length()<=0){ set = false; return; }
try{
int p = s.indexOf(",");
if (p<0){
matrixbreite = new Integer(s).intValue();
updown = 0;
set = true;
}else{
matrixbreite = new Integer(s.substring(0,p)).intValue();
updown = new Integer(s.substring(p+1)).intValue();
set = true;
}
}catch(NumberFormatException e){
set = false;
}
}
public void vorarbeit() {
tmpbreite = Math.min(matrixbreite, 1+eingabe.length());
len = eingabe.length() / tmpbreite; // Anzahl ganzer Zeilen
rest= eingabe.length() % tmpbreite; // Laenge der letzten Zeile bzw. 0
maxlen = rest>0 ? len+1 : len; // Gesamtzahl der Zeilen
// Spaltenlaengen
spaltenleng = new int[tmpbreite];
for(int s=0; s0) zeilenleng[maxlen-1]=rest;
feld = new char[tmpbreite][]; // feld [spalten] [spaltenlaenge]
// Spalten anlegen
for(int s=0; s