# Zeichenketten



## hos15 (25. Jul 2016)

Hallo Liebe Java Freunde ich brauche dringend eure Hilfe. Ich schreibe in wenigen Tagen eine Klausur und ich verstehe diese Aufgabe nicht. Bitte um Hilfe.


----------



## Viktim (25. Jul 2016)

hos15 hat gesagt.:


> ich verstehe diese Aufgabe nicht.


Verstehst du beide teile nicht oder nur den 2ten?


----------



## Joose (25. Jul 2016)

Was verstehst du nicht? Was hast du bisher versucht?


----------



## Viktim (25. Jul 2016)

Ich zeig dir mal den ersten Teil, dann kriegst du den 2ten bestimmt hin 

```
public static void main(String[] args) {
    String string = "tannenbaum";
    string = string.toUpperCase(); //Macht großbuchstaben
    for (int i = 1; i < string.length() + 1; i++) {
      System.out.println(string.substring(0, i)); //Gibt einen Teil des Strings aus also von 0 bis i
    }
  }
```


----------



## Viktim (25. Jul 2016)

Hallo, falls du den zweiten Teil nicht hinkriegen solltest, lad ich den Code davon hier auch hoch... 
(Geht eigentlich wie der Erste, nur das du deinen Aktuellen SubString nochmal umdrehen musst)
Fertig ist er schon


----------



## hos15 (25. Jul 2016)

Ich überlege nochmal selbst ich schreibe dann was ich habe aber danke


----------



## Viktim (25. Jul 2016)

hos15 hat gesagt.:


> Ich überlege nochmal selbst ich schreibe dann was ich habe aber danke


Okay 
Wenn du noch eine Frage Zu dem was ich geschrieben hab hast, sag bescheid


----------



## hos15 (25. Jul 2016)

Also habe die 1 so gelöst : 

```
public static void main (String []args){
   

    String text ="tannenbaum";
   
    for(int i=0;i<1;i++){
        for(int j=1;j>i & j<11 ;j++){
        String umgewanndelt = text.toUpperCase();

        System.out.println(umgewanndelt.substring(i,j));
    }
           
           
   
    }
```

aber die Aufgabe 2 habe ich nur bis hier hin geschafft: 

```
public static void main (String []args){
   

    String text ="tannenbaum";
    String [] text2= text.split("");
    String x;
for(int c =9;c>=0;c--){
    x=text2[c];
    System.out.println(x);
}
```


----------



## Joose (25. Jul 2016)

Bei deiner Lösung zu Aufgabe 1 kannst du dir die äußere for-Schleife sparen (die sorgt nur dafür das der maximal 1x durchgeführt wird)
Und es reicht vor der Schleife den String 1x in Großbuchstaben umzuwandeln, nicht bei jedem Schleifendurchlauf.

Bei der Lösung zu Aufgabe 2:
Warum initialisierst du c mit 9? 
Du solltest "x" nicht immer mit einem neuen Wert beschreiben sondern am besten den vorhandenen ergänzen.

Ansonsten hier noch ein Tipp wie man einen String umdreht: http://stackoverflow.com/questions/7569335/reverse-a-string-in-java
Bei Aufgabe 2 musst du ja nur das was du bei Aufgabe 1 gemacht hast in umgekehrter Reihenfolge davor stehen haben


----------



## hos15 (25. Jul 2016)

Wie soll ich es mit nur einer schleife machen ? verstehe ich nicht..


----------



## Joose (25. Jul 2016)

Die Lösung zur Aufgabe 1 hat der Viktim schon gezeigt, er verwendet ebenfalls nur eine Schleife.
Bei deiner Lösung macht die äußere Schleife nichts wichtiges außer die Variable "i" zu initialisieren. Diese ist aber nicht wirklich notwendig (siehe Lösung von Viktim).


----------



## hos15 (25. Jul 2016)

ahh habs jetzt danke


----------



## hos15 (25. Jul 2016)

aber keine Ahnung wie die 2 geht :/


----------



## Joose (25. Jul 2016)

Es ähnelt sehr dem Beispiel 1. Du musst nur diesen Teilstring den du ausgibst umdrehen und davor ausgeben.

Sprich: Anstatt direkt den Teilstring ausgeben zu lassen solltest du ihn in einer String Variable zwischenspeichern.
Danach umdrehen und ausgeben (wie man ihn umdreht dazu habe ich vorhin einen Link gepostet) und danach gibst du den normalen Teilstring aus


----------



## hos15 (25. Jul 2016)

nein also versuche es seit 2 stunden bekomme es nicht hin


----------



## Flown (25. Jul 2016)

Was bekommst du denn nicht hin? Sag was dir nicht eingeht.


----------



## hos15 (25. Jul 2016)

Ich verstehe nicht wie ich die Buchstaben drehen kann. Als Tipp habe ich ja bekommen ((Tipp: Buchstaben einzeln entnehmen und neu zusammensetzen)) und ja keine Ahnung wie ich das machen soll -.-


----------



## Flown (25. Jul 2016)

Wie würdest du es am Papier machen?


----------



## hos15 (25. Jul 2016)

Ich würde den Buchstaben der an letzter stelle steht ganz am anfang schreiben den vorletzten anhängen und so weiter


----------



## Flown (25. Jul 2016)

Wie würdest du es in Code umsetzen?


----------



## hos15 (25. Jul 2016)

Mhhh etwa so 

```
String text2 = text.replace("tannenbaum", "muabnennat");
    System.out.println(text2);
```

aber ist das jetzt geschummelt haha ?


----------



## Flown (25. Jul 2016)

Ein paar Tipps:
String konkatenieren: `String s = "a" + "b"; //"ab"`
Stringlänge: `s.length()`
Einzelne chars aus dem String: `s.charAt(...)`

Jetzt brauchst du nur noch eine Schleife von hinten nach vorne zu durchlaufen und es deinem String anhängen, dann ist das umgedreht.


----------



## hos15 (25. Jul 2016)

Also geht es nicht so wie ich es gemacht habe schade :/
hab nur soviel geschafft 

```
String text2;

for(int d=9;d>=0;d--){
    System.out.println(text.charAt(d));
   
   
}
```


----------



## hos15 (25. Jul 2016)

Jetzt habe ich sowas 

```
char text2;

for(int d=9;d>=0;d--){
   
     text2=text.charAt(d);
    System.out.print(text2);
   
   
}
```


----------



## Xyz1 (25. Jul 2016)

Sorry, wenn ich mich nochmal einmische,

```
package javaapplication;

public class Temp {
    public static void main(String[] args) {
        String text = "Tannenbaum";
        text = text.toUpperCase();
        for (int i = 0; i < text.length(); i++) {
            System.out.println(text.substring(0, i + 1));
        }
        for (int i = 0; i < text.length(); i++) {
            String temp = new StringBuilder(text).reverse().toString();
            System.out.println("         ".substring(0, temp.length() - i - 1) /* ab hier wichtig: */ + temp.substring(temp.length() - i - 1, temp.length()) + text.substring(0, i + 1));
        }
    }
}
```


```
T
TA
TAN
TANN
TANNE
TANNEN
TANNENB
TANNENBA
TANNENBAU
TANNENBAUM
         TT
        ATTA
       NATTAN
      NNATTANN
     ENNATTANNE
    NENNATTANNEN
   BNENNATTANNENB
  ABNENNATTANNENBA
 UABNENNATTANNENBAU
MUABNENNATTANNENBAUM
```

Ich hab 9 Zeilen gebraucht.

Nicht ganz konform der Aufgabenstellung!!!!

Meinst du, es hat, nebenbei bemerkt, einen Sinn an der Klausur, wie du sagst, teilzunehmen, wenn du doch noch diese Schwierigkeiten hast?

Ich meine, ich kann 1.000 Seiten in 3 Tagen lesen +/& verstehen, aber das ist nicht bei jede so.

Grüße Leute


----------



## hos15 (25. Jul 2016)

Klar macht es Sinn. Ich gebe niemals auf und schaffe alles was ich will du wirst schon sehen


----------



## Xyz1 (25. Jul 2016)

Nagut dann mal viel Erfolg. 

Zur richtigen Lösung, du musst, wie richtig bemerkt, mit .charAt() auf einzelne Zeichen des Strings in der richtigen Abfolge/Reihenfolge zugreifen....

Ohne StringBuilder usw. Vielleicht 3 _innere_ Schleifen: Leerzeichen, Umgedrehtes, Nicht-Gedrehtes....


----------



## Viktim (26. Jul 2016)

Ich poste jetzt auch mal das was ich vorbereitet hab 

```
public static void main(String[] args) {
    String string = "tannenbaum";
    string = string.toUpperCase();
    for (int i = 1; i < (string.length() + 1) / 2; i++) {
      String aktuellerSubstring = string.substring(0, i);
      String umgekehrterString = "";
      // Schleife läuft vom letzten Buchstaben zum ersten.
      for (int j = aktuellerSubstring.length() - 1; j >= 0; j--) {
        // Holt sich den Aktuellen Buchstaben und hängt ihn an den aktuellen String aus
        umgekehrterString = umgekehrterString + aktuellerSubstring.charAt(j);
      }
      // Ansonsten kannst du auch mit:
      // umgekehrterString = new StringBuilder(aktuellerSubstring).reverse().toString();
      // den String umdrehen

      System.out.println(umgekehrterString + aktuellerSubstring);
    }
  }
```
Und auch hier gilt wieder, wenn du eine Frage dazu hast, frag


----------



## Cromewell (27. Jul 2016)

Ich habe gerade auch mal was geschrieben:

```
public static void main(String[] args){
    String s = "Tannenbaum".toUpperCase();

    for(int i = 0; i < s.length(); i++){
        System.out.println(s.substring(0, i+1));
    }
    String rev = new StringBuilder(s).reverse().toString();
    for(int i = 0; i < rev.length(); i++){
        System.out.print(insertSpaces(rev.length()-i)+rev.substring(rev.length()-i-1 ,rev.length()));
        System.out.println(s.substring(0, i+1));
    }
}

private static String insertSpaces(int amount) {
    String spaces = "";
    for(int i = 0; i < amount; i++){
        spaces += " ";
    }
    return spaces;
}
```

Edit: die insertSpaces Medthode, falls man den String am Anfang durch args[0] oder so ersetzen will...


----------

