/* Beispielloesung zu Uebungsblatt 14, AI 1, WS 2006/07 nh - 01/2007 */ import IOulm.*; public class Chiffre { public static final int lowerBound = 32; // untere Grenze des ASCII-Bereichs public static final int upperBound = 127; // obere Grenze des ASCII-Bereichs public static final String PROGNAME = "Chiffre"; public static String message = ""; // zu codierender Text public static boolean reverse = false; // wird true bei Reverse-Option public static boolean shiftUp = false; // wird true bei Verschieben n. v. public static boolean shiftDown = false; // wird true bei Verschieben n. h. public static int shiftWidth = 0; // Schrittweite bei (evtl.) Verschieben // Gibt die Usage-Meldung aus und bricht das Programm mit Exit-Code 1 ab. public static void usage() { Write.Line("USAGE: java " + PROGNAME + " [-dn -un -r -mtext -?]"); System.exit(1); // 1 indiziert Fehlerzustand } // Wird aufgerufen, wenn das Programm mit der Option "-?" gestartet wird public static void showManual() { Write.Line("Folgende Optionen stehen zur Verfügung:"); Write.Line("-r: gibt den eingelesenen String rückwärts aus"); Write.Line("-un: verschiebt die Zeichen um n Positionen nach oben"); Write.Line("-dn: verschiebt die Zeichen um n Positionen nach unten"); Write.Line("-mtext: verwendet text als Nachricht (kein Lesen von STDIN)"); Write.Line("-?: gibt (nur) diesen Hilfetext aus"); System.exit(0); } // Fuehrt eine Ueberpruefung der Argumente durch. Der Rueckgabewert ist // 'true', wenn die Ueberpruerfung erfolgreich war, andernfalls (z.B. bei // nicht zulaessigen Optionen) ist er 'false'. public static boolean checkArgs(String[] args) { // Keine Argumente angegeben if (args.length == 0) return false; // Pruefen, ob alle Argumente mit "-" beginnen for (int i=0; i=0;i--) tmp = tmp + msg.charAt(i); return tmp; } // das gleiche: globale Variable, bla bla public static String shiftString(String msg, int sw) { String tmp = ""; int tmpShift; for (int i=0; iupperBound) { tmp = tmp + msg.charAt(i); continue; } tmpShift = charVal + sw; if (tmpShift < lowerBound) tmpShift += (upperBound-lowerBound); if (tmpShift >= upperBound) tmpShift = (tmpShift % upperBound) + lowerBound; tmp = tmp + (char) (tmpShift); } return tmp; } // Das Hauptprogramm, das dank der Verwendung von Methoden nun recht // uebersichtlich gehalten werden kann public static void main (String[] args) { // Argumente pruefen und verarbeiten if (!checkArgs(args)) usage(); // Falls die Option "-w" nicht gesetzt war, muss der zu verschluesselnde // Text von der Standardeingabe gelesen werden. Dies erledigt unsere // Methode readMessage(). if (message == "") message = readMessage(); if (reverse) message = reverseString(message); if (shiftUp) message = shiftString(message, shiftWidth); if (shiftDown) message = shiftString(message, shiftWidth*(-1)); Write.Line(message); } }