# Freiwillige Hausübung



## Windows10 (16. Apr 2016)

Mein Programm soll den String-Parameter umdrehen!!
Beispiel: Hans-->snaH

Dann soll es noch den Anfangsbuchstaben groß setzen und den Endbuchstaben klein
Dann wäre snaH-->Snah

Mein Code:

```
public static String spiegeln(String wort)
    {
        StringBuilder spiegel=new StringBuilder();
        int länge=wort.length();
        while(länge!=0)
        {
            char b=wort.charAt(länge-1);
            spiegel.append(b);
            länge--;
        }
        char a=wort.charAt(0);
        char b=Character.toUpperCase(a);
        länge=wort.length();
        char c=wort.charAt(länge-1);
        char d=Character.toLowerCase(c);
        spiegel.setCharAt(0,b);
        spiegel.setCharAt(länge-1,d);
        String s=spiegel.toString();
        return s;
    }
```

Ich finde einfach den Fehler nicht!!


----------



## InfectedBytes (16. Apr 2016)

und wie jedes mal:
Gibt es ein Fehlermeldung? Wenn ja, welche?
Ansonsten, welche "unerwünschte" Ausgabe erhälst du denn?


----------



## Windows10 (16. Apr 2016)

InfectedBytes hat gesagt.:


> und wie jedes mal:
> Gibt es ein Fehlermeldung? Wenn ja, welche?
> Ansonsten, welche "unerwünschte" Ausgabe erhälst du denn?


Es gibt keine Fehlermeldung!!!!!

Es gibt immer snaH statt Snah aus. Also, es muss Snah zurückgeben, aber es gibt snaH zurück!!


----------



## InfectedBytes (16. Apr 2016)

na dann überleg dir mal was du dort machst.
dein StringBuilder spiegel enthält das umgedrehte Wort. 
Nun holst du dir aber vom normalen Wort das erste Zeichen und setzt das erste Zeichen von deinem StringBuilder auf dieses Zeichen. 
Lösung:
Hol dir also das erste Zeichen vom gespiegelten Wort und nicht vom ursprünglichen. 
Das gleiche gilt für das letzte Zeichen.

p.s.
Warum immer die unnötigen Ausrufezeichen?


----------



## Windows10 (16. Apr 2016)

InfectedBytes hat gesagt.:


> na dann überleg dir mal was du dort machst.
> dein StringBuilder spiegel enthält das umgedrehte Wort.
> Nun holst du dir aber vom normalen Wort das erste Zeichen und setzt das erste Zeichen von deinem StringBuilder auf dieses Zeichen.
> Lösung:
> ...


Wenn ich es außerhalb des StringBuilders mache, geht es gar nicht mehr!!!


----------



## InfectedBytes (16. Apr 2016)

du sollst auch nichts "außerhalb" vom StringBuilder machen.

```
char a=wort.charAt(0);
```
Damit holst du dir das erste Zeichen von deinem ursprünglichen Wort, im Beispiel von Hans eben das Zeichen H


```
spiegel.setCharAt(0,b);
```
Hiermit setzt du nun aber das Zeichen h an die erste Stelle von deinem StringBuilder.


Das einzige was du ändern musst, ist also das nicht das erste Zeichen von "Hans" zu holen, sondern das erste Zeichen von "snaH"

```
char a=spiegel.charAt(0);
```
Und analog für das letzte Zeichen.

Ansonsten solltest du deine Variablennamen überdenken und außerdem reicht es mehr als genug, wenn du nur ein einziges Ausrufezeichen benutzt...


----------



## Windows10 (16. Apr 2016)

InfectedBytes hat gesagt.:


> du sollst auch nichts "außerhalb" vom StringBuilder machen.
> 
> ```
> char a=wort.charAt(0);
> ...


Aber wie soll ich das im StringBuilder ändern?


----------



## InfectedBytes (16. Apr 2016)

Liest du dir die Antworten überhaupt durch?
Einfach

```
char a=wort.charAt(0);
```
mit

```
char a=spiegel.charAt(0);
```
ersetzen.

Analog für das letzte Zeichen.


----------



## Windows10 (16. Apr 2016)

InfectedBytes hat gesagt.:


> Liest du dir die Antworten überhaupt durch?
> Einfach
> 
> ```
> ...


Jetzt schaut mein Code so aus, und es geht noch immer nicht.

```
public class Spiegeln
{
    public static String spiegeln(String wort)
    {
        StringBuilder spiegel=new StringBuilder();
        int länge=wort.length();
        while(länge!=0)
        {
            char b=wort.charAt(länge-1);
            spiegel.append(b);
            länge--;
        }
        char a=spiegel.charAt(0);
        char b=Character.toUpperCase(a);
        char c=spiegel.charAt(länge-1);
        char d=Character.toLowerCase(c);
        String s=spiegel.toString();
        return s;
    }
}
```


----------



## InfectedBytes (16. Apr 2016)

jetzt hast du noch mehr geändert und wieder neue Fehler eingebaut, außerdem hast du auch noch das spiegel.setCharAt entfernt...
Jetzt bekommst du eine Exception, weil länge 0 ist, und du bei spiegel.charAt(länge-1) eben auf einen negativen Index zugreifen willst.

Nimm den Code aus deinem ersten Beitrag und führe die oben genannte Änderung durch.


----------



## Windows10 (16. Apr 2016)

InfectedBytes hat gesagt.:


> jetzt hast du noch mehr geändert und wieder neue Fehler eingebaut, außerdem hast du auch noch das spiegel.setCharAt entfernt...
> Jetzt bekommst du eine Exception, weil länge 0 ist, und du bei spiegel.charAt(länge-1) eben auf einen negativen Index zugreifen willst.
> 
> Nimm den Code aus deinem ersten Beitrag und führe die oben genannte Änderung durch.


Danke, jetzt geht es


----------

