# String „vertikal“ auf der Konsole ausgeben



## stefani (16. Jun 2011)

Hallo,
Ich habe folgende Methode geschrieben.

```
public static   String druckeString(String[] s){
	
		for(int i = 1; i< s.length; i++)
			System.out.println(s.charAt[i]);
	}	

Ausgabe:
String sc.next();
	druckeVertikal(s);
```
um ein String vertikal auszugeben. zum Beispiel: Name
N
A
M
E

irgendwie klappt es leider nicht :-(


----------



## faetzminator (16. Jun 2011)

1. Warum startet [c]i[/c] bei 1? Indexe beginnen immer bei 0.
2. Warum willst du die Methode [c]charAt()[/c] mit eckigen Klammern aufrufen?

Btw:
Du könntest auch [c]toCharArray()[/c] verwenden, dann musst du nicht jedes Mal [c]charAt[/c] aufrufen. Und damit liesse sich erst noch eine for-each Schleife programmieren


----------



## stefani (16. Jun 2011)

So abgesehen von toCharArray.
Habe meine Methode, wei folgt geändert:

```
public static   String druckeString(String[] s){
    
        for(int i = 0; i< s.length; i++)
            System.out.println(s.charAt(i));
    }   
 


	public static void main (String[]args){
		

	String s = s.next();
	druckeString(s);
	}
}
```
geht immer noch nicht


----------



## faetzminator (16. Jun 2011)

1. Gem. deinem Beispiel heisst es [c]sc.next();[/c] und nicht [c]s.next();[/c]. 
2. Wo ist die Variable ([c]sc[/c]) überhaupt deklariert?
3. Es gibt kein Attribut [c]lenth[/c] bei einem String - nur eine Methode [c]lenth()[/c]

Btw, du solltest auch immer Klammern machen, auch wenn das Statement dahinter nur einzeilig ist.
Kannst du eigentlich keine Compilerfehler lesen? Der sagt dir genau das, was ich dir sage


----------



## stefani (16. Jun 2011)

Danke für Antwort


> . Gem. deinem Beispiel heisst es sc.next(); und nicht s.next(); .
> 2. Wo ist die Variable (sc ) überhaupt deklariert?


wir arbeiten mit ultraEdit und fürs Einlesen wurde eigene Methode geschrieben, weil diese hätte hier für Irratationen soregen könnte habe ich einfach so ersetzt.
sonst wird wie folgt gelesen:
	
	
	
	





```
String s = Tastatur.liesString();
```
Der code sieht nun so was:

```
public static   String druckeString(String [] s){
    
        for(int i = 0; i < s.length(); i++){
            System.out.println(s.charAt(i));
        }
    }   
 
	public static void main (String[]args){
		
		String s = Tastatur.liesString();
		druckeString(s);
	}
}
```
Sie Fehlermeldung ist ziemlich verwirrend :-(


----------



## faetzminator (16. Jun 2011)

Ow, da hat es ja noch mehr Fehler... bin anscheinend immer noch am schlafen :bahnhof:
bist du dir sicher, dass [c]druckeString()[/c]...
1. einen String zurückgeben soll?
2. der Parameter wirklich ein String-*Array* sein soll?


----------



## stefani (16. Jun 2011)

Meine Idee war dabei die Buchstaben in einem Array einzulesen, dann vertikal ausgeben.
Bin nun nicht ganzs icher, ob solche Operationen  mit Array möglich wäre.


----------



## faetzminator (16. Jun 2011)

Du übergibst aber einen String, und erwartest auch einen String  Es gibt nur zwei sinnvolle Möglichkeiten: Entweder soll man [c]String[/c] oder [c]char[][/c] übergeben.


----------



## MarderFahrer (16. Jun 2011)

stefani hat gesagt.:


> Meine Idee war dabei die Buchstaben in einem Array einzulesen, dann vertikal ausgeben.
> Bin nun nicht ganzs icher, ob solche Operationen  mit Array möglich wäre.



Sicherlich ist sowas mit einem Strin gArray möglich, aber dein ganzes Programm ist bereits so geschrieben, dass es mit Strings arbeitet. Was passiert, wenn du anstelle von 
	
	
	
	





```
String [] s
```
 in Zeile 1 
	
	
	
	





```
String s
```
 schreibst?


----------



## stefani (16. Jun 2011)

ich nun 

```
String []
```
entfernt und bisschen noch angepasst und schon funktioniert es

Ich bedanke mich ganz herzlichst bei Euch


----------



## MarderFahrer (16. Jun 2011)

Bitte bitte. Wie faetzminator schon gesagt hat, kann zusätzlich auch noch der return der druckeString Methode weggelassen werden, da diese Methode ja bereits die Ausgabe erledigt. Keinen Grund, dass diese Methode dann auch noch etwas zurückgibt.

btw, mir war langweilig und da hab ich damit ein wenig rumgespielt und wenn man eine kleine Methode hinzufügt und den Code etwas anpasst kommt da folgendes heraus:

```
S u p e r 
u u
p   p
e     e
r       r
```

Die Methode(n):

```
private static String addSpaces(int count, char value){
		String stringWithAddedSpaces = Character.toString(value);
		for(int i = 0; i < count; i++){
			stringWithAddedSpaces = stringWithAddedSpaces + " ";
		}
		return stringWithAddedSpaces;
	}
	
	public static void druckeString(String s){
        for(int i = 0; i < s.length(); i++){
        	if(i == 0){
        		for(int j = 0; j < s.length(); j++){
        			System.out.print(s.charAt(j) + " ");
        		}
        		System.out.println();
        	}else if (i == 1){
        		System.out.println(addSpaces(i, s.charAt(i)) + s.charAt(i));
        	}else{
        		System.out.println(addSpaces(i+i-1, s.charAt(i)) + s.charAt(i));
        	}
        }
    }
```

Zum starten einfach:

```
public static void main(String[] args) {
		druckeString("Super");
	}
```


----------



## faetzminator (16. Jun 2011)

Um nochmals auf die for-each Schleife zurückzukommen (- damit du dieses schöne Teil auch kennenlernst)...:
Du hast nun eine Methode, welche warscheinlich etwa so aussieht:

```
public static void druckeString(String s) {
    for (int i = 0; i < s.length(); i++) {
        System.out.println(s.charAt(i));
    }
}
```
mit der for-each Schleifen kannst du über Klassen, welche [c]Iterable[/c] implementieren (wie Listen etc) oder Arrays iterieren. Mit [c]String.toCharArray()[/c] bekommt du ein [c]char[][/c], also optimal für die Schleife. Dann kannst du so was schickes machen - ganz ohne Index:

```
public static void druckeString(String s) {
    for (char c : s.toCharArray()) {
        System.out.println(c);
    }
}
```


----------

