Frage von alwinbaumann1, 33

Hilfe bei BlueJ Ascii-Tabelle?

Ich brauche Hilfe mit der Askiitabelle in BlueJ. Ich möchte, dass ich ein Wort eingebe (String) und alle Buchstaben aus dem Wort um x Stellen verschoben werden. Ich habe 2 Methoden. Bei der einen kann ich einen kann ich einen Buchstaben eingeben (char) und bekomme die dezimalzahl raus. Bei der 2. gebe ich die Dezimalzahl ein und bekomme den Buchstaben:

public int gibCode(char c) { int x =(int)c; return x; }

public char gibZeichen(int z) { char x = (char)z; return x; }

Antwort
von JupStrunk, 27

und was genau ist jetzt dein Problem?

Kommentar von alwinbaumann1 ,

ich möchte beides in eine Methode kriegen. dass ich ein wort eingebe(String) und die Buchstaben des wortes um x Stellen verschoben werden. wie macht man das?

Kommentar von alwinbaumann1 ,

ich bekomme immer den fehler: incompatible types: possible lossy conversion from int to char

Kommentar von JupStrunk ,

naja, es gibt etliche Wege das zu machen... :D

wenn's eine Hausaufgabe ist, weiß ich leider nicht, ob Du irgendwelche Vorgaben hast...

aber ich kann dir zeigen wie ich das lösen würde !!!

    public String encode(String str, int step){
// Code-String erstellen
String strNormal = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890";
String strCode = "";
for(int t = 0; t < strNormal.length(); ++t){
int pos = t + step;
if(pos >= strNormal.length()) pos -= strNormal.length();
strCode += strNormal.charAt(pos);
}

// String verschlüsseln
String strRet = "";
for(int t = 0; t < str.length(); ++t) {
int pos = strNormal.indexOf(str.charAt(t));
strRet += strCode.charAt(pos);
}

return strRet;
}

public String decode(String str, int step){
// Code-String erstellen
String strNormal = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890";
String strCode = "";
for(int t = 0; t < strNormal.length(); ++t){
int pos = t + step;
if(pos >= strNormal.length()) pos -= strNormal.length();
strCode += strNormal.charAt(pos);
}

// String verschlüsseln
String strRet = "";
for(int t = 0; t < str.length(); ++t) {
int pos = strCode.indexOf(str.charAt(t));
strRet += strNormal.charAt(pos);
}

return strRet;
}
Kommentar von JupStrunk ,

Nachtrag:
habe gerade gemerkt, dass es zu einem Fehler kommen kann, wenn im String ein Zeichen ist, dass im Code-String nicht berücksichtigt wurde !!!

also sollte der Code so geändert werden:

in encode

// String verschlüsseln
String strRet = "";
for(int t = 0; t < str.length(); ++t) {
int pos = strNormal.indexOf(str.charAt(t));
if(pos >= 0) strRet += strCode.charAt(pos);
else strRet += str.charAt(t);
}

in decode

// String verschlüsseln
String strRet = "";
for(int t = 0; t < str.length(); ++t) {
int pos = strCode.indexOf(str.charAt(t));
if(pos >= 0) strRet += strNormal.charAt(pos);
else strRet += str.charAt(t);
}
Kommentar von JupStrunk ,

wegen der Konvertierungs-Warnung (ist kein Fehler)...
das ist weil char eigentlich dem Wertetyp Byte entspricht...
int kann aber größere Werte als 255 speichern, im Gegensatz zu Byte !!!
wenn der Integerwert also größer als 255 ist, kommt es zu einem Überlauf...
das wird dann das Programm (wahrscheinlich) nicht abstürtzen lasse, aber es wird zu einem falschen Wert in der char Variable führen !!!

wenn Du also darauf achtest, dass die Integervariable immer einen gültigen Wert enthält, kannst Du diese Warnung getrost ignorieren... ;)

Kommentar von alwinbaumann1 ,

danke

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten