# Datentyp char -> Zeichen um einen Wert erhöhen



## babuschka (10. Sep 2006)

Guten Abend 

Mein Problem ist folgendes:
Ich möchte eine Caesar-Verschiebung in einem kleinen Java-Programm umsetzen (Aus 'a' wird 'b', aus 'b' wird 'c' ....)
An der entscheidenden Stelle versagen allerdings meine Kentnnisse...
Wie erhöhe ich den Wert einer Variable vom Typ char um eine Stelle?

Mit.. 


```
char test01 = 97;
    System.out.print(test01);    // Ausgabe: a
```

lässt sich zwar ein Wert vom ASCII-Code einer Char-Variable zuweisen, allerdings funktioniert folgendes nicht..


```
char test02 = 'a' + 1;
```

Hat jemand eine Idee, wie man den Wert einer Char-Variable um eine Stelle erhöhen könnte?

Vielen Dank im voraus!


Viele Grüße,
Rouven


----------



## André Uhres (10. Sep 2006)

Rouven hat gesagt.:
			
		

> ..allerdings funktioniert folgendes nicht..
> 
> ```
> char test02 = 'a' + 1;
> ```


Was soll daran nicht funktionieren?


----------



## babuschka (11. Sep 2006)

@André Uhres

Du hast Recht, mit 


```
char test = 'a' + 1;
```

funktioniert es einwandfrei.

Ich hatte mich ein wenig vertan, denn mein eigentliches Problem sah so aus...


```
int test_int = 1;
    char test_char = 'a' + test_int;
```

Damit bekommt man bei der Kompilierung folgende Fehlermeldung um die Ohren:

Test.java:9: possible loss of precision
found   : int
required: char
                test_char = 'a' + test_byte;

Auch mit einer Variable vom Typ byte funktioniert es nicht. 

Jemand eine Idee?  :bahnhof: 

Viele Grüße,
Rouven


----------



## thE_29 (11. Sep 2006)

test_char = 'a' + (char)test_byte;


----------



## L-ectron-X (11. Sep 2006)

```
char test_char = 'a';
test_char += (char)1;
```


----------



## Guest (11. Sep 2006)

Mit...

```
test_char = 'a' + (char)test_byte;
```
klappt es wunderbar! Vielen Dank!   


Viele Grüße,
Rouven


----------



## Leroy42 (11. Sep 2006)

Und vergiß bei der Cäsar-Kodierung nicht auf Überlauf zwischen ['a'...'z'] zu achten.  :wink:


----------



## babuschka (11. Sep 2006)

@Leoroy42

Ich habe daran gedacht, trotzdem danke für den Hinweis!   
Bin gerade dabei nicht nur die Verschiebung des Alphabets bestimmen zu können, sondern auch Code-Wörter benutzen zu können.
Z.B.:
"WELT"
->WELTABCDFGHIJKMNOPQRSUVWXYZ

Sehr interessanters Thema.. 

Viele Grüße,
Rouven


----------



## Wildcard (11. Sep 2006)

Rouven hat gesagt.:
			
		

> Sehr interessanters Thema..


Wenn du Codes magst, ist der Link in meiner Sig genau das richtige für dich  :wink:


----------



## Eminent (13. Sep 2006)

Hi,

da ich beim "Rumspielen" mit der o. g. Verschlüsselung letzte Woche auch was komische gefunde habe schließe ich mich hier einfach mal an mit meiner Frage.

Und zwar hab ich mir char[] erzeugt und wollte diese dann komplett einfach um einen bestimmten Wert "verfälschen". Dazu hat meine Methode alles mögliche übergeben bekommen und ich wollte einfach erstmal folgendes machen:


```
// Das char[] ist natürlich line :-)
         for (int i = 0; i < line.length; i++) {
            char a = line[i];
            // Die folgende Zeile geht NICHT und eclipse bringt mir einen Type mismatch wg. convert
            // from int to char
            line[i] = a + 1;
            // Zum Testen warum die obere Zeile nicht geht habe ich folgedes propiert und das funktioniert
            char b = 'a' + 1;
         }
```

Kann mir von euch einer sagen warum die eine Zeile geht und die andere nicht?


----------



## SammY (13. Sep 2006)

Versuch mal:


```
line[i] = a + (char)1;
```


----------



## babuschka (13. Sep 2006)

@ Eminent

Da hast du ja (fast) das gleiche Problem wie ich 

Vielleicht kann ich dir ein wenig helfen...


```
// Das char[] ist natürlich line :-) 
         for (int i = 0; i < line.length; i++) { 
            char a = line[i]; 
            // Die folgende Zeile geht NICHT und eclipse bringt mir einen Type mismatch wg. convert 
            // from int to char 
            line[i] = a + 1;
```
Dass diese Zeile so nicht funktioniert, liegt an der Addition von der Char-Variable und der 1. Um die beiden Werte zu addieren, werden sie in Integer-Variablen umgewandelt. Das Ergebnis, das immernoch int ist, wird an die Char-Variable line übergeben, was natürlich nicht funktioniert. 
Eine Lösung wäre:

```
line[i] = (char) (a + 1);
```
mit (char) davor "zwingst" du den Wert der Addition in deine Char-Variable.


Diese Zeile funktioniert...

```
// Zum Testen warum die obere Zeile nicht geht habe ich folgedes propiert und das funktioniert 
            char b = 'a' + 1; 
         }
```
weil hier keine Char-Variable, sondern der Wert 'a' (bzw. 97) mit 1 addiert wird.


Ich hoffe, ich konnte dir bei deinem Problem helfen.

Viele Grüße,
Rouven


----------



## Guest (13. Sep 2006)

Rouven hat gesagt.:
			
		

> Dass diese Zeile so nicht funktioniert, liegt an der Addition von der Char-Variable und der 1. Um die beiden Werte zu addieren, werden sie in Integer-Variablen umgewandelt. Das Ergebnis, das immernoch int ist, wird an die Char-Variable line übergeben, was natürlich nicht funktioniert.
> Eine Lösung wäre:
> 
> ```
> ...



Perfekt genau das wars was ich (mal wieder blind gewesen  :bahnhof: ) nicht hin bekommen hab!!! DANKE


----------

