frage zu algorithmus

nautiLus`

Erfahrenes Mitglied
hi, hab ne frage zu einem kleinen crypt algorithmus.
bin noch relativ unerfahren in java und hab daher einfach nur mal die frage, wie ihr bei dieser aufgabenstellung vorgehen würdet:

Aufgabenstellung:
Ihr Programm soll eine Schlüsselzahl k und den zu verschlüsselnden String einlesen. Dieser wird durch die Verschiebungsmethode verschlüsselt:
Bei dieser Methode wird jeder Buchstabe um k Stellen im Alphabet (nach hinten) verschoben. Beispiel: 1 HALLO => IBMMP

der 1er steht dabei für die anzahl der verschobenen buchstaben.

Wenn der Buchstabe durch die Verschiebung über das Z kommt, dann wird wieder bei A fortgesetzt. Beispiel: 3 UXZ => XAC

noch ein bsp:

14 QvzsNRC //eingabe
EJNGBFQ //ausgabe

danke, mfg
 
Ich würde mir den ASCII-Wert der Zeichen geben lassen und dazu den Schlüssel addieren. Wenn das Ergebnis über Z geht 255 abziehen.

Befehle dazu siehe Java-Doku.
 
Hi,

wie ist das genau mit den Imports? Gibt es für das ASCII ein package oder sollte ich jedes Zeichen dem ASCII Code zuordnen? Soll ich das dann in ein array geben oder wie würdest du es machen? Sorry für meine Unerfahrenheit ...

mfg nauti

-
edit: nach was muss ich z.b. suchen wenn ich einen string kontrollieren will, ob er nur aus buchstaben besteht (a-z)?
Mit der Doku komm ich leider nicht gut zurecht.
 
Zuletzt bearbeitet:
Code:
class Test
{
 public static void main(String[]args)
 {
  String text = "Text";
  System.out.println(text.charAt(0));
  System.out.println((byte)text.charAt(0));
 }
}
text.charAt(0) gibt das erste Zeichen aus dem String text zurück (1 würde das zweite geben usw.)
Wenn du das Ergebnis als Byte castest erhältst du den ASCII-Wert.

Dieses Programm liefert folgende Ausgabe:
T
84
Den ersten Buchstaben des Strings und dessen ASCII-Wert.

Wenn du mit deiner Dokumentation nicht zurecht kommst solltest du dir eine neue besorgen und/oder ein Buch kaufen, sonst wirst du beim Programmieren nicht weit kommen.

Hab gerade gesehen das ich in meinem Beitrag oben einen Fehler habe:
"Wenn das Ergebnis über Z geht 255 abziehen" stimmt natürlich nicht.
Das muss heißen wenn das Ergebnis über 255 geht, weil es sonst den Wertebereich eines Bytes verlässt.

Damit verschiebst du allerdings den Text innerhalb der Byte-Grenzen (0-255).
Wenn du als Verschiebungszahl 1 hast und willst das Z damit auf A abgebildet wird, also Verschiebung nur innerhalb des Alphabets, musst du das extra prüfen.
Code:
class Test
{
 public static void main(String[]args)
 {
  char   z   = (char)Integer.parseInt(args[0]);
  String in  = args[1];
  String out = "";
  char   x   = ' ';

  for (int i=0;i<in.length();i++)
  {
   x = in.charAt(i);
   if (x != ' ')
   { x = (char)(x + z); }
   if (x >= 'Z')
   { x = (char)(x - 26); }
   System.out.print(x);
  }
  System.out.print("\n");
 }
}
Dieses Programm ruft man über die Konsole auf:
java Test 1 Text
wobei 1 die Verschiebungszahl und Text der zu verschlüsselnde Text ist.
Es gibt noch kleine Fehler, z.B. darf die Verschiebungszahl nicht größer als 26 sein und geht nur mit Großbuchstaben, aber das kannst du ja anpassen wie du willst.
 
Zuletzt bearbeitet:
Danke für Deine schnellen Antworten und für die Tipps!
mfg

edit:
Mein Endproblem (hoffentlich) ist folgendes:

Code:
	private static void cryptAlgorithmus(String Schluessel, String neueNachricht, int nachrichtenLength)
	{  	
		int i = 0;
			 	
	 	while (i < nachrichtenLength) {
  		System.out.print(neueNachricht.charAt(i));
  		byte byteNachricht = (byte)neueNachricht.charAt(i);
  		int intSchluessel = Integer.parseInt(Schluessel);
  		int Ergebnis = byteNachricht + instSchluessel;
  		println(Ergebnis); 		
	    i++;
	    }
	}

Habe hier nun den eingegebenen Wert des Buchtaben in ein byte gecastet und zu dem den Schlüssel (als int) addiert.

jetzt muss ich nur noch die zahl wieder in einen String also in den Buchstaben umwandeln damit er mir umgekehrt zu vorhin das richtige Ergebnis liefert.
Da häng ich gerade...
danke mfg

edit: grml das mit den wenns über "Z" geht hab ich vergessen.....
 
Zuletzt bearbeitet:
hi,

hab das Programm fertiggestellt.
Falls dich oder wen anderen die Lösung interessiert, schreibt einfach und ich werde sie dann posten.

danke Retlaw für die Unterstützung.
Habe einiges versucht wie du sagtest, was auch sicher geklappt hätte, wenn ich noch nicht so unerfahren wäre.
hab es aber dann doch irgendwie geschafft auf einen ähnlichen Weg! =)

mfg nauti
 
Zurück