Zahlenbereich festlegen java?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ja. Der Trick heißt "Modulo Operator".

Es gilt dann für Großbuchstaben beispielsweise:

neuerASCIICode = 65 + ((alterASCIICode - 65) + Rotation) % 65)

Im Endeffekt kannst Du auch machen

neuerASCIICode = 32 + ((alterASCIICode - 32) + Rotation) % 32)

Das erschlägt mal alle ANSI Zeichen ab und inklusive des Leerzeichens.

Nur weiß ich nicht, wie ich einen Zahlenbereich festlege z.B. bei Großbuchstaben ASCII 65-90, dass wenn ich in der Schleife sage, er soll um 3 stellen verschieben == 90, 65, 66, 67 macht und nicht nach 90 mit 91 weiter zählt.

Was genau ist denn das Problem daran wenn er einfach weiterzählt? Sehe den Nachteil daran nicht, aber einige, wenn man immer nur durch die Buchstaben rotiert. Wie willst du zum Beispiel Sonderzeichen verschlüsseln?

Das At-Zeichen ist auf 64, wenn du das um 3 Stellen verschiebst, hätte es den selben Wert wie das große Z, was von 90 auf -> 65 -> 66 -> 67 hoppst.


Linow194 
Fragesteller
 04.11.2021, 12:44

Sonderzeichen, Ziffern und Umlaute sollen nicht verschlüsselt werden, ausschließlich Groß- und Kleinbuchstaben.

Hier die Vorgabe: ... ich möchte keine komplette Lösung, brauche nur einen Tipp, wie ich einen Zahlenbereich festlege.

Nicht zu vergessen, dass ich mich im 2. Monat meines Studiums befinde und noch nicht so erfahren bin.

Aufgabe 5-3
Ein sehr einfaches Verschlüsselungsverfahren arbeitet wie folgt: Jeder Buchstabe des zu verschlüsselnden Textes wird um eine bestimmte Anzahl an Stellen zyklisch nach rechts verschoben.
Verschiebt man beispielsweise um drei Stellen, wird aus Katze das Wort Ndwch.
Zum Entschlüsseln muss in diesem Fall jeder Buchstabe des verschlüsselten Textes Ndwch um drei Stellen zyklisch nach links verschoben werden. Beachten Sie, dass nur Klein- und Groÿbuchstaben, aber keine Sonderzeichen, Ziern oder Umlaute (ä, ö, ü, . . .) verschlüsselt werden sollen.
Implementieren Sie die Methode verschluesseln in der Klasse VerEntschluesselung zum Verschlüsseln des übergebenen Textes sowie eine weitere Methode entschluesseln zum analogen Entschlüsseln.
1 public static String verschluesseln(String eingabe, int n)
2 public static String entschluesseln(String eingabe, int n)
In beiden Methoden beschriebt der Parameter n, um wie viele Stellen die Buchstaben im übergebenen String zyklisch nach rechts bzw. links verschoben werden sollen.

package test;

public class VerEntschluesselung {

public static String verschluesseln(String eingabe, int n) {
// hier sind Sie gefragt
}

public static String entschluesseln(String eingabe, int n) {
// hier sind Sie gefragt
}

}

0
GuteAntwort2021  04.11.2021, 13:05
@Linow194

Ah, okay.

int GBmin=65;
int GBmax=90;
int KBmin=97;
int KBmax=122:

Und nun den int Value vom character ermitteln, zum Beispiel:

int tmp = (int) char[i];

natürlich vorausgesetzt, du wandelst den vermutlichen String in ein Char-Array um (so würde ich es jedenfalls machen).

Nun ermitteln ob es sich um einen Groß- oder Kleinbuchstaben handelt und entsprechend umsetzen:

if (tmp>=GBmin && tmp<=GBmax) {
	//um 3 Stellen nach links verschieben
	tmp-=3;
	if (tmp<GBmin)
		tmp+=(GBmax-GBmin+1);
}

Wenn du jetzt zum Beispiel C hättest, wäre das ursprünglich 67. Nach der Verschiebung dann 64. GBmax-GBmin ergibt die Differenz des Zahlenbereichs, wobei natürlich jeder Buchstabe zählt, also nochmal +1.

64 + 26 = 90

Aus dem C würde also ein Z, aus dem B ein Y und aus dem A ein X.

Beim Zurückwandeln entsprechend andersrum:

if (tmp>=GBmin && tmp<=GBmax) {
	//um 3 Stellen nach rechts verschieben
	tmp+=3;
	if (tmp>GBmax)
		tmp-=(GBmax-GBmin+1);
}

Denn aus dem C was zu einem Z wurde, würde jetzt 90+3 = 93 und das müssen wir zurück auf 67 bringen:

(GBmax-GBmin+1) ist immer noch 26.
93 - 26 = 67

Es wäre also wieder ein C.

So würde ich es handhaben. Aber vielleicht hast du ja noch eine bessere Idee.

1

Füg doch einfach alle erlaubten Werte in eine Liste und iteriere darüber ... Dann musst du dir über "Sprünge" auch keine Gedanken machen.

Alternativ, was sich hier anbietet: Addiere auf den Index (von 0 bis 25), welchen du mit Modulo auf den Bereich reduzierst, einfach 65 drauf