All pastes #811160 Raw Edit

Untitled

public text v1 · immutable
·published 2007-12-10 17:40 UTC
rendered paste body
public class Caesar {
	static String msgKodieren(char key, char ch, boolean decode) {
		/*
		 * Die Methode uebernimmt den Schluessel (key), einen Grossbuchstaben (ch),
		 * die Option Kodieren(false)/Dekodieren(true) und gibt einen String
		 * mit dem Buchstaben zurueck.
		 */
		char c=65; // 65 entspricht dem "A" (Grossbuchstabe)
		int i=1,j=0,k;
		StringBuffer s = new StringBuffer(1); // Kleiner String Buffer fuer 1 Char
		//
		// ch zu Uppercase (sonst klappt der Vergleich spaeter nicht)
		//
		s.append(ch); // Char in den String Buffer...
		String s1=s.toString(); // ...StringBuffer in den String...
		s1=s1.toUpperCase(); // ...String zu Uppercase...
		ch=s1.charAt(0); // ...und Uppercase zurueck in Char
		s.delete(0, s.length()); // Loeschen den Buffers, da er spaeter nocheinmal gebraucht wird
		//
		// key zu Uppercase
		//
		s.append(key);// gleiche Prozedur wie bei "ch"
		s1=s.toString(); 
		s1=s1.toUpperCase();
		key=s1.charAt(0);
		s.delete(0, s.length());
		for (k=0,c=65; c<key-1;c++) // Verschiebungs-Faktor berechnen
			i++;		
		if (decode == false) // Dekodieren
			for (j = 0; j<i;j++) // ch um Faktor i verschieben. Wird "Z" ueberschritten, Sprung zu "A"
				if (ch<90)
					ch++;
				else ch=65;
		else // Kodieren
			for (j = 0; j<i;j++) // ch um Faktor i verschieben. Wird "Z" ueberschritten, Sprung zu "A"
				if (ch>65)
					ch--;
				else ch=90;
		s.append(ch);
		String sOut=s.toString();
		return sOut; // �bergabe des Kodierten/Dekodierten Buchstaben
	}
	public static void main(String[] args) {
		//
		//	Pruefung der Argumente
		//
		/*
		 * Es wird ueberprueft, ob die Kommandozeilenparametern die richtige Anzahl haben 
		 * und ob der Kommandozeilenparameter, der den Schluessel angibt, die richtige Form hat. 
		 * Sind die Kommandozeilenparameter nicht korrekt, wird eine Fehlermeldung ausgegeben und 
		 * das Programm beendet sich.
		 */
		if (args[0].length()>1  // 1. Argument laenger als ein Buchstabe?
				|| args[0].isEmpty()==true // 1. Argument fehlt?
				|| (Character.isLetter(args[0].charAt(0))==true  // 1. Argument = Buchstabe?
						&& args[0].charAt(0)<=65 // 1. Argument = Grossbuchstabe?
						&& args[0].charAt(0)>=90)// "" ?
				|| (args[0].charAt(0)<=97 // 1. Argument = Kleinbuchstabe?
						&& args[0].charAt(0)>=122) // "" ?
				|| args[1].isEmpty()==true // 2. Argument fehlt?
				|| args.length>=3) // 3. Argument vorhanden?
			System.err.print("Parameter ungueltig!"+"\n"
								+"Argument 1 sollte ein Gross-/Kleinbuchstabe sein!"+"\n"
								+"Argument 2 sollte eine beliebige Zeichenfolge sein!");
		else {
		//
		// Wenn Eingaben korrekt:
		//	
		char key=args[0].charAt(0); // Schluessel uebernehmen
		String msg=args[1];			// Nachricht (msg) uebernehmen
		StringBuffer s = new StringBuffer(msg.length()); // Buffer der Laenge msg.length
		for (int i=0; i<msg.length();i++){
			//
			// Char zu Uppercase
			//
			StringBuffer ChBuffer = new StringBuffer(1);
			ChBuffer.append(msg.charAt(i));
			String bString=ChBuffer.toString();
			bString=bString.toUpperCase();
			char ch=bString.charAt(0);
			/* Jedes Zeichen wird darauf geprueft ein Buchstabe zu sein. Wenn ja, wird das Zeichen
			 * einzeln Chiffriert, zurueckgegeben und in den StringBuffer geschrieben. Ist das Zeichen
			 * kein Buchstabe, kommt es direkt in den Buffer.
			 * Ist der Schluessel (key) ein Grossbuchstabe wird die Nachricht kodiert. Sollte der
			 * Schluessel ein Kleinbuchstabe sein wird die Nachricht dekodiert.
			 */
			// Kodieren
			if (Character.isLetter(ch)==true && ch>=65 && ch<=90)
				if (Character.isUpperCase(key)==true) 
					s.append(msgKodieren(key,msg.charAt(i),false)); // Kodieren
				else s.append(msgKodieren(key,msg.charAt(i),true)); // Dekodieren
			else {s.append(msg.charAt(i)); // Unkodiert				
			}
		}
		// Ausgabe
		System.out.print("+++ +++ +++ +++ ++++ +++ +++ +++ +++ +++ +++ +++"+"\n"
				+"Klartext: "+msg+"\n"
				+"Kodiert:  "+s+"\n"
				+"+++ +++ +++ +++ ++++ +++ +++ +++ +++ +++ +++ +++");
		}
	}
}