<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Javakurs%2F%C3%9Cbungsaufgaben%2FC%C3%A4sar-Chiffre%2FMusterloesung</id>
	<title>Javakurs/Übungsaufgaben/Cäsar-Chiffre/Musterloesung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Javakurs%2F%C3%9Cbungsaufgaben%2FC%C3%A4sar-Chiffre%2FMusterloesung"/>
	<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/C%C3%A4sar-Chiffre/Musterloesung&amp;action=history"/>
	<updated>2026-04-25T07:16:41Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FreitagsrundenWiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/C%C3%A4sar-Chiffre/Musterloesung&amp;diff=14156&amp;oldid=prev</id>
		<title>Jörg F: hat „Javakurs2007/Cäsar-Chiffre/Musterloesung“ nach „Javakurs/Übungsaufgaben/Cäsar-Chiffre/Musterloesung“ verschoben:&amp;#32;wikistruktur</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/C%C3%A4sar-Chiffre/Musterloesung&amp;diff=14156&amp;oldid=prev"/>
		<updated>2010-08-01T11:50:59Z</updated>

		<summary type="html">&lt;p&gt;hat „&lt;a href=&quot;/Javakurs2007/C%C3%A4sar-Chiffre/Musterloesung&quot; class=&quot;mw-redirect&quot; title=&quot;Javakurs2007/Cäsar-Chiffre/Musterloesung&quot;&gt;Javakurs2007/Cäsar-Chiffre/Musterloesung&lt;/a&gt;“ nach „&lt;a href=&quot;/Javakurs/%C3%9Cbungsaufgaben/C%C3%A4sar-Chiffre/Musterloesung&quot; title=&quot;Javakurs/Übungsaufgaben/Cäsar-Chiffre/Musterloesung&quot;&gt;Javakurs/Übungsaufgaben/Cäsar-Chiffre/Musterloesung&lt;/a&gt;“ verschoben: wikistruktur&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version vom 1. August 2010, 11:50 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Jörg F</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/C%C3%A4sar-Chiffre/Musterloesung&amp;diff=13689&amp;oldid=prev</id>
		<title>Andre: Die Seite wurde neu angelegt: „= Cäsar-Chiffre - Musterlösung =  Fas Verschlüsseln und Entschlüsseln wurde der Übersichtlichkeit halber in zwei Klassen aufgeteilt, welche eigenständig lau...“</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/C%C3%A4sar-Chiffre/Musterloesung&amp;diff=13689&amp;oldid=prev"/>
		<updated>2010-03-24T13:38:16Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Cäsar-Chiffre - Musterlösung =  Fas Verschlüsseln und Entschlüsseln wurde der Übersichtlichkeit halber in zwei Klassen aufgeteilt, welche eigenständig lau...“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Cäsar-Chiffre - Musterlösung =&lt;br /&gt;
&lt;br /&gt;
Fas Verschlüsseln und Entschlüsseln wurde der Übersichtlichkeit halber in zwei Klassen aufgeteilt, welche eigenständig lauffähig sind.&lt;br /&gt;
&lt;br /&gt;
== CaesarEncode.java (Cäsar-Verschlüsselung) ==&lt;br /&gt;
&lt;br /&gt;
Diese Klasse liest eine Datei ein, verschlüsselt sie und speichert sie anschließend.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
package caesar;&lt;br /&gt;
&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.BufferedWriter;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import java.io.FileWriter;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.util.LinkedList;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Programm welches eine Textdatei mit der Caesar-Verschiebung verschlüsselt.&amp;lt;br&amp;gt;&lt;br /&gt;
 * Der Schluessel ist eine genze Zahl zwischen 0 und 26,&lt;br /&gt;
 * um die alle &amp;quot;normalen&amp;quot; Buchstaben verschoben werden.&amp;lt;br&amp;gt;&lt;br /&gt;
 * (nur &amp;lt;code&amp;gt;a..z&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;A..Z&amp;lt;/code&amp;gt;)&amp;lt;br&amp;gt;&lt;br /&gt;
 * Der Originaltext wird aus einer Datei eingelesen und&lt;br /&gt;
 * verschlüsselt in eine andere geschrieben.&amp;lt;br&amp;gt;&lt;br /&gt;
 * (eine vorhandene Datei wird dabei ueberschrieben)&amp;lt;br&amp;gt;&lt;br /&gt;
 * Parameterliste: Dateiname (Eingabe), Schluessel, Dateiname (Ausgabe)&lt;br /&gt;
 * @author André Schulz&lt;br /&gt;
 * @version 1.0 (3/2009)&lt;br /&gt;
 */&lt;br /&gt;
public class CaesarEncode&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Main-Methode fuehrt das Programm aus.&amp;lt;br&amp;gt;&lt;br /&gt;
	 * Programm verschiebt alle Buchstaben um &amp;lt;code&amp;gt;Schluessel&amp;lt;/code&amp;gt; (zwischen 0 und 26).&lt;br /&gt;
	 * @param args [Dateiname fuer Eingabe, Schluessel, Dateiname fuer Ausgabe]&lt;br /&gt;
	 * @throws IOException falls Fehler beim Lesen der Datei auftreten&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) throws IOException&lt;br /&gt;
	{&lt;br /&gt;
		// bei falscher Argument-Länge wird die Parameterliste ausgegeben&lt;br /&gt;
		if (args.length != 3)&lt;br /&gt;
		{&lt;br /&gt;
			System.out.println(&amp;quot;params: &amp;lt;fileIn&amp;gt; &amp;lt;key&amp;gt; &amp;lt;fileOut&amp;gt;&amp;quot;);&lt;br /&gt;
			// beenden des Programms&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// ==++== lesen der Eingabedatei (Klartext)&lt;br /&gt;
		System.out.println(&amp;quot;reading&amp;quot;);// Fortschrittausgabe&lt;br /&gt;
		&lt;br /&gt;
		// erstellt Reader um aus Datei zu lesen&lt;br /&gt;
		BufferedReader br = new BufferedReader(new FileReader(args[0]));&lt;br /&gt;
		&lt;br /&gt;
		// liest eine Zeile aus der Datei ein&lt;br /&gt;
		String line = br.readLine();&lt;br /&gt;
		&lt;br /&gt;
		// Liste für die verschlüsselten Zeilen&lt;br /&gt;
		LinkedList&amp;lt;String&amp;gt; encodedLines = new LinkedList&amp;lt;String&amp;gt;();&lt;br /&gt;
		int key = -1;// initialisieren der Variable für die Verschiebung mit default-Wert&lt;br /&gt;
		&lt;br /&gt;
		// Ermitteln des Schluessels und Fehlerbehandlung&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			// wandelt den String aus dem 2. Parameter in eine Zahl um&lt;br /&gt;
			key = Integer.parseInt(args[1]);&lt;br /&gt;
		}&lt;br /&gt;
		catch (NumberFormatException e)&lt;br /&gt;
		{&lt;br /&gt;
			// wenn der String nicht in eine ganze Zahl umgewandelt werden konnte&lt;br /&gt;
			// wird eine Fehlermeldung ausgegeben und beendet&lt;br /&gt;
			System.out.println(&amp;quot;could not parse key ('&amp;quot; + args[1] + &amp;quot;' is no number!)&amp;quot;);&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// Ueberpruefung ob der Schluessel im gueltigen Bereich liegt&lt;br /&gt;
		if (key &amp;lt; 0 || key &amp;gt; 26)&lt;br /&gt;
		{&lt;br /&gt;
			// Fehlermeldung wenn Schluessel ausserhlab Bereich&lt;br /&gt;
			System.out.println(&amp;quot;key must be 0..26&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// es werden so lange Zeilen gelesen, wie vorhanden&lt;br /&gt;
		while (line != null)&lt;br /&gt;
		{&lt;br /&gt;
			// fuegt die verschluesselten Zeilen der Zeilen-Liste hinzu&lt;br /&gt;
			encodedLines.add(encode(line, key));&lt;br /&gt;
			line = br.readLine();// lesen der naechsten Zeile&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// schliesst den Reader, da nicht mehr benoetigt&lt;br /&gt;
		// (Datei ist wieder fuer andere Programme frei)&lt;br /&gt;
		br.close();&lt;br /&gt;
		// ==--== lesen der Eingabedatei (Klartext)&lt;br /&gt;
&lt;br /&gt;
		// ==++== schreiben der Ausgabedatei (verschluesselt)&lt;br /&gt;
		System.out.println(&amp;quot;writing output...&amp;quot;);// Fortschrittausgabe&lt;br /&gt;
		&lt;br /&gt;
		// erstellt Writer um in eine Datei zu schreiben (vorhandene wird ueberschrieben)&lt;br /&gt;
		BufferedWriter bw = new BufferedWriter(new FileWriter(args[2]));&lt;br /&gt;
&lt;br /&gt;
		// Schleife lauft ueber alle Elemente in der Zeilen-Liste&lt;br /&gt;
		for (String lineOut : encodedLines)&lt;br /&gt;
		{&lt;br /&gt;
			bw.write(lineOut);// schreibt aktuelle Zeile in Datei&lt;br /&gt;
			bw.write(&amp;quot;\n&amp;quot;);// schreibt Zeilenumbruch in Datei&lt;br /&gt;
			// bw.write(&amp;quot;\r\n&amp;quot;);//schreibt Zeilenumbruch in Datei (Windows-Version)&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// schliesst Writer, da nicht mehr benoetigt&lt;br /&gt;
		bw.close();&lt;br /&gt;
		// ==--== schreiben der Ausgabedatei (verschluesselt)&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;finsh&amp;quot;);// Fortschrittausgabe&lt;br /&gt;
	}// main&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Methode, welche einen String nach Caesar verschiebt.&lt;br /&gt;
	 * @param text Text der zu verschluesseln ist&lt;br /&gt;
	 * @param key Schluessel, um den Buchstaben verschoben werden sollen (0..26)&lt;br /&gt;
	 * @return verschluesselter Text&lt;br /&gt;
	 */&lt;br /&gt;
	private static String encode(String text, int key)&lt;br /&gt;
	{&lt;br /&gt;
		// erstellt neuen StringBuilder, um Ausgabe-String zu generieren&lt;br /&gt;
		StringBuilder sb = new StringBuilder();&lt;br /&gt;
&lt;br /&gt;
		int newC;// Code eines alten buchstaben&lt;br /&gt;
		int oldC;// Code des Buchstaben in neu&lt;br /&gt;
&lt;br /&gt;
		// Schleife durchlauft alle Zeichen&lt;br /&gt;
		while (!text.isEmpty())&lt;br /&gt;
		{&lt;br /&gt;
			// der erste Buchstabe wird gelesen&lt;br /&gt;
			newC = oldC = text.charAt(0);&lt;br /&gt;
&lt;br /&gt;
			// Ueberpruefung ob Zeichen ein Buchstabe ist,&lt;br /&gt;
			// dann wird umgewandelt (ansonsten bleibt Zeichen erhalten)&lt;br /&gt;
			if (oldC &amp;gt;= 'a' &amp;amp;&amp;amp; oldC &amp;lt;= 'z')&lt;br /&gt;
			{&lt;br /&gt;
				// Kleinbuchstabe&lt;br /&gt;
				newC = oldC + key;// Verschluesselung&lt;br /&gt;
&lt;br /&gt;
				if (newC &amp;gt; 'z')//Behandlung von Overflows&lt;br /&gt;
				{&lt;br /&gt;
					newC -= 26;// anpassen des Buchstaben&lt;br /&gt;
				}// if&lt;br /&gt;
			}&lt;br /&gt;
			else if (oldC &amp;gt;= 'A' &amp;amp;&amp;amp; oldC &amp;lt;= 'Z')&lt;br /&gt;
			{&lt;br /&gt;
				// Grossbuchstabe&lt;br /&gt;
				newC = oldC + key;// Verschluesselung&lt;br /&gt;
				&lt;br /&gt;
				if (newC &amp;gt; 'Z')//Behandlung von Overflows&lt;br /&gt;
				{&lt;br /&gt;
					newC -= 26;// anpassen des Buchstaben&lt;br /&gt;
				}// if&lt;br /&gt;
			}// if&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// nix, da nur &amp;quot;normale&amp;quot; Buchstaben verschluesselt werden&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// das aktuelle Zeichen (der verschluesselte Buchstabe)&lt;br /&gt;
			//wird dem String hinzugefuegt&lt;br /&gt;
			sb.append((char) newC);&lt;br /&gt;
			&lt;br /&gt;
			// der momentane Text wird auf den Rest (one erstes Zeichen) gesetzt&lt;br /&gt;
			text = text.substring(1);&lt;br /&gt;
		}// while&lt;br /&gt;
&lt;br /&gt;
		return sb.toString();// verschluesselter String wird zurueckgegeben&lt;br /&gt;
	}// encode&lt;br /&gt;
}//classs&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CaesarEncode.java (Cäsar-Entschlüsselung) ==&lt;br /&gt;
&lt;br /&gt;
Diese Klasse entschlüsselt eine verschlüsselte Datei. Dazu gibt es zwei Möglichkeiten:&lt;br /&gt;
# man gibt den Schlüssel an nach dem entschlüsselt werden soll (wenn bekannt)&lt;br /&gt;
# man gibt keinen Schlüssel an und das Programm ermittelt den Schlüssel.&lt;br /&gt;
Bei beiden Versionen wird die entschlüsselte Datei anschließend gespeichert.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
package caesar;&lt;br /&gt;
&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.BufferedWriter;&lt;br /&gt;
import java.io.FileReader;&lt;br /&gt;
import java.io.FileWriter;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.util.LinkedList;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Programm welches eine mit der Caesar-Verschiebung verschlüsselte Textdatei entschluesselt.&amp;lt;br&amp;gt;&lt;br /&gt;
 * Der Schluessel wird entweder als Parameter uebergeben oder durch das Programm ermittelt.&amp;lt;br&amp;gt;&lt;br /&gt;
 * Bei der eigenstaendigen Ermittlung wird nach dem haefigsten Buchstaben gesucht,&lt;br /&gt;
 * welcher dann das &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; sein muesste.&amp;lt;br&amp;gt;&lt;br /&gt;
 * Parameterliste:&amp;lt;br&amp;gt;&lt;br /&gt;
 * entweder: Dateiname (Eingabe), Schluessel, Dateiname (Ausgabe)&amp;lt;br&amp;gt;&lt;br /&gt;
 * oder: Dateiname (Eingabe), Dateiname (Ausgabe)&lt;br /&gt;
 * @author André Schulz&lt;br /&gt;
 * @version 1.0 (3/2009)&lt;br /&gt;
 */&lt;br /&gt;
public class CaesarDecode&lt;br /&gt;
{&lt;br /&gt;
	public static void main(String[] args) throws IOException&lt;br /&gt;
	{&lt;br /&gt;
		// Ueberpruefung ob Parameteranzahl falsch ist&lt;br /&gt;
		if (args.length &amp;lt; 2 || args.length &amp;gt; 3)&lt;br /&gt;
		{&lt;br /&gt;
			// Ausgabe der parameterliste und beenden des Programms&lt;br /&gt;
			System.out.println(&amp;quot;params: &amp;lt;fileIn&amp;gt; [&amp;lt;key&amp;gt;] &amp;lt;fileOut&amp;gt;&amp;quot;);&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		int key = -1;// Schluessel (Initialisierung mit default-Wert)&lt;br /&gt;
		String fileNameout;// Name der Ausgabedatei&lt;br /&gt;
		&lt;br /&gt;
		// erstellt Reader um aus verschluesselter Datei zu lesen&lt;br /&gt;
		BufferedReader br = new BufferedReader(new FileReader(args[0]));&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;reading&amp;quot;);// Fortschrittausgabe&lt;br /&gt;
		String line = br.readLine();// liest erste Zeile&lt;br /&gt;
		&lt;br /&gt;
		// Liste fuer die gelesenen Zeilen&lt;br /&gt;
		LinkedList&amp;lt;String&amp;gt; lines = new LinkedList&amp;lt;String&amp;gt;();&lt;br /&gt;
		&lt;br /&gt;
		// Schleife so lange, wie gelesene Zeilen Text enthalten&lt;br /&gt;
		while (line != null)&lt;br /&gt;
		{&lt;br /&gt;
			lines.add(line);// hinzufuegen der Zeile zur Liste&lt;br /&gt;
			line = br.readLine();// lesen der naechsten Zeile&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// Schliessen der Datei&lt;br /&gt;
		br.close();&lt;br /&gt;
&lt;br /&gt;
		// Auswahl je nach Parameteranzahl&lt;br /&gt;
		if (args.length == 3)&lt;br /&gt;
		{&lt;br /&gt;
			// 3 Parameter: Schluessel vom Benutzer gegeben&lt;br /&gt;
&lt;br /&gt;
			try&lt;br /&gt;
			{&lt;br /&gt;
				// wandelt den String aus dem 2. Parameter in eine Zahl um&lt;br /&gt;
				key = Integer.parseInt(args[1]);&lt;br /&gt;
			}&lt;br /&gt;
			catch (NumberFormatException e)&lt;br /&gt;
			{&lt;br /&gt;
				// wenn der String nicht in eine ganze Zahl umgewandelt werden konnte&lt;br /&gt;
				// wird eine Fehlermeldung ausgegeben und beendet&lt;br /&gt;
				System.out.println(&amp;quot;could not parse key ('&amp;quot; + args[1] + &amp;quot;' is no number!)&amp;quot;);&lt;br /&gt;
				System.exit(0);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Ueberprueft Schluessel auf Gueltigkeit&lt;br /&gt;
			if (key &amp;lt; 0 || key &amp;gt; 26)&lt;br /&gt;
			{&lt;br /&gt;
				// Fehlerausgabe wenn ungueltig und beendung des Programms&lt;br /&gt;
				System.out.println(&amp;quot;key must be 0..26&amp;quot;);&lt;br /&gt;
				System.exit(0);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// setzt Dateiname fuer Ausgabe mit Wert aus 3. Parameter&lt;br /&gt;
			fileNameout = args[2];&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// nicht 3 Parameter =&amp;gt; 2 Parameter&lt;br /&gt;
			// Schluessel ist niciht gegeben uns muss ermittelt werden&lt;br /&gt;
&lt;br /&gt;
			// Schluesselermittlung an Hand der gelesenen Zeilen&lt;br /&gt;
			key = determineKey(lines);&lt;br /&gt;
			fileNameout = args[1];// Dateiname fuer Ausgabe&lt;br /&gt;
			System.out.println(&amp;quot;key:&amp;quot; + key);// Ausgabe des gefundenen Schluessels&lt;br /&gt;
		}// else&lt;br /&gt;
&lt;br /&gt;
		System.out.println(&amp;quot;writing output...&amp;quot;);// Fortschrittausgabe&lt;br /&gt;
		&lt;br /&gt;
		// Writer zum Schreiben der entschluesselten Datei&lt;br /&gt;
		BufferedWriter bw = new BufferedWriter(new FileWriter(fileNameout));&lt;br /&gt;
&lt;br /&gt;
		// Schleife geht alle gelesenen Zeilen durch&lt;br /&gt;
		for (String lineOut : lines)&lt;br /&gt;
		{&lt;br /&gt;
			// jede Linie wird separat decodiert und dann in Datei geschrieben&lt;br /&gt;
			bw.write(decode(lineOut, key));&lt;br /&gt;
			bw.write(&amp;quot;\n&amp;quot;);// Zeilenumbruch&lt;br /&gt;
			// bw.write(&amp;quot;\r\n&amp;quot;);//schreibt Zeilenumbruch in Datei (Windows-Version)&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// Schliessen der Datei&lt;br /&gt;
		bw.close();&lt;br /&gt;
		System.out.println(&amp;quot;finsh&amp;quot;);// Fortschrittausgabe&lt;br /&gt;
	}// main&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Methode ermittelt den Schluessel an Hand des Textes.&lt;br /&gt;
	 * @param lines Text als Liste der Zeilen&lt;br /&gt;
	 * @return Schluessel mit dem verschluesselt wurde&lt;br /&gt;
	 */&lt;br /&gt;
	private static int determineKey(LinkedList&amp;lt;String&amp;gt; lines)&lt;br /&gt;
	{&lt;br /&gt;
		int i;// Zaehlvariable (wird mehr mahls verwendet)&lt;br /&gt;
		int[] lower = new int[26];// Array fuer Haufigkeit der Kleinbuchstaben&lt;br /&gt;
		int[] upper = new int[26];// Array fuer Haufigkeit der Grossbuchstaben&lt;br /&gt;
		char c;// aktuelles Zeichen&lt;br /&gt;
&lt;br /&gt;
		// ==++== Ermittlung der einzelnen Haeufigkeiten&lt;br /&gt;
		// Schleife durchlauft alle eingelesenen Zeilen&lt;br /&gt;
		for (String line : lines)&lt;br /&gt;
		{&lt;br /&gt;
			// Zeile wird Zeichen fuer Zeichen durchlaufen&lt;br /&gt;
			for (i = 0; i &amp;lt; line.length(); i++)&lt;br /&gt;
			{&lt;br /&gt;
				c = line.charAt(i);// Zeichen wird gelesen&lt;br /&gt;
&lt;br /&gt;
				// wenn Zeichen ein buchstabe ist, wird Stelle im Array incrementiert&lt;br /&gt;
				if (c &amp;gt;= 'a' &amp;amp;&amp;amp; c &amp;lt;= 'z')&lt;br /&gt;
				{&lt;br /&gt;
					// Kleinbuchstabe&lt;br /&gt;
					lower[c - 'a']++;&lt;br /&gt;
				}&lt;br /&gt;
				else if (c &amp;gt;= 'A' &amp;amp;&amp;amp; c &amp;lt;= 'Z')&lt;br /&gt;
				{&lt;br /&gt;
					// Grossbuchstabe&lt;br /&gt;
					upper[c - 'A']++;&lt;br /&gt;
				}&lt;br /&gt;
			}// for&lt;br /&gt;
		}// for&lt;br /&gt;
		// ==--== Ermittlung der einzelnen Haeufigkeiten&lt;br /&gt;
&lt;br /&gt;
		// Ausgabe der einzelnen Haeufigkeiten&lt;br /&gt;
		c = 'a';// angefangen bei &amp;quot;a&amp;quot;...&lt;br /&gt;
		for (i = 0; i &amp;lt; 26; i++)&lt;br /&gt;
		{&lt;br /&gt;
			// Ausgabe des Buchstaben und der Haeufigkeit bei Klein- und Grossbuchstaben&lt;br /&gt;
			System.out.println(c + &amp;quot;\t&amp;quot; + lower[i] + &amp;quot;\t&amp;quot; + upper[i]);&lt;br /&gt;
			c++;// weiter zum naechsten Buchstaben&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//==++== Suche nach dem haeufigsten Buchstaben&lt;br /&gt;
		c = ' ';// default &amp;quot;Buchstabe&amp;quot;&lt;br /&gt;
		int max = -1;// groesste gefundene Haeufigkeit&lt;br /&gt;
		// Durchlaufen beider Arrays parallel&lt;br /&gt;
		for (i = 0; i &amp;lt; 26; i++)&lt;br /&gt;
		{&lt;br /&gt;
			// wenn aktueller Buchstabe haeufiger als anderer zuvor&lt;br /&gt;
			if (lower[i] + upper[i] &amp;gt; max)&lt;br /&gt;
			{&lt;br /&gt;
				// merken der groessten Haeufigkeit&lt;br /&gt;
				max = lower[i] + upper[i];&lt;br /&gt;
				&lt;br /&gt;
				// merken des Buchstaben&lt;br /&gt;
				c = (char) ('a' + i);// Rechnung mit Zeichen (z.B.: 'a'+2='c')&lt;br /&gt;
			}&lt;br /&gt;
		}// for&lt;br /&gt;
		//==--== Suche nach dem haeufigsten Buchstaben&lt;br /&gt;
&lt;br /&gt;
		// theoretisch steht jetzt in der Variable c der Buchstabe mit der&lt;br /&gt;
		// groessten Haeufigkeit im eingelesen Text, da bei deutschen Texten das 'e'&lt;br /&gt;
		// am Haeufigsten auftritt muss dies ein verschluesseltes 'e' sein&lt;br /&gt;
&lt;br /&gt;
		int key = c - 'e';// ausrechnen des Schluessels&lt;br /&gt;
		&lt;br /&gt;
		// anpassen des Schluessels bei einem Overflow&lt;br /&gt;
		if (key &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			key += 26;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return key;// ermittelter Schluessel wird zurueckgegeben&lt;br /&gt;
	}// countLetter&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Methode decodiert einen Text bei gegebenen Schluessel.&lt;br /&gt;
	 * @param text zu entschluesselnder Text&lt;br /&gt;
	 * @param key Schluessel, mit dem verschluesslt wurde&lt;br /&gt;
	 * @return entschluesselter Text&lt;br /&gt;
	 */&lt;br /&gt;
	private static String decode(String text, int key)&lt;br /&gt;
	{&lt;br /&gt;
		// neuer StringBuilder um Ausgabetext zu &amp;quot;bauen&amp;quot;&lt;br /&gt;
		StringBuilder sb = new StringBuilder();&lt;br /&gt;
&lt;br /&gt;
		int newC;// Code eines alten buchstaben&lt;br /&gt;
		int oldC;// Code des Buchstaben in neu&lt;br /&gt;
&lt;br /&gt;
		// Schleife so lange der Text noch Zeichen enthaelt&lt;br /&gt;
		while (!text.isEmpty())&lt;br /&gt;
		{&lt;br /&gt;
			// einlesen des ersten Zeichens&lt;br /&gt;
			newC = oldC = text.charAt(0);&lt;br /&gt;
&lt;br /&gt;
			// Ueberpruefung ob Zeichen ein normaler Buchstabe ist&lt;br /&gt;
			if (oldC &amp;gt;= 'a' &amp;amp;&amp;amp; oldC &amp;lt;= 'z')&lt;br /&gt;
			{&lt;br /&gt;
				// Kleinbuchstabe&lt;br /&gt;
				newC = oldC - key;// Entschluesselung&lt;br /&gt;
				&lt;br /&gt;
				if (newC &amp;lt; 'a')// Behandlung von Overflows&lt;br /&gt;
				{&lt;br /&gt;
					newC += 26;// anpassen des Buchstaben&lt;br /&gt;
				}// if&lt;br /&gt;
			}&lt;br /&gt;
			else if (oldC &amp;gt;= 'A' &amp;amp;&amp;amp; oldC &amp;lt;= 'Z')&lt;br /&gt;
			{&lt;br /&gt;
				// Grossbuchstabe&lt;br /&gt;
				newC = oldC - key;// Entschluesselung&lt;br /&gt;
				&lt;br /&gt;
				if (newC &amp;lt; 'A')// Behandlung von Overflows&lt;br /&gt;
				{&lt;br /&gt;
					newC += 26;// anpassen des Buchstaben&lt;br /&gt;
				}// if&lt;br /&gt;
			}// if&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// nix, da nur &amp;quot;normale&amp;quot; Buchstaben verschluesselt werden&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// entschluesselter Buchstabe wird Text hinzugefuegt&lt;br /&gt;
			sb.append((char) newC);&lt;br /&gt;
			&lt;br /&gt;
			// der momentane Text wird auf den Rest (one erstes Zeichen) gesetzt&lt;br /&gt;
			text = text.substring(1);&lt;br /&gt;
		}// while&lt;br /&gt;
&lt;br /&gt;
		return sb.toString();// entschluesselter text wird zurueckgegeben&lt;br /&gt;
	}// encode&lt;br /&gt;
}//class&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andre</name></author>
		
	</entry>
</feed>