# For-Schleife und anderes



## Sibylle (8. Jun 2010)

Guten Tag,

zur Lösung einer kleinen Aufgabe bitte ich um mehrere Hinweise:

a. Gibt es die Möglichkeit eine For-Schleife mit einem negativen Step auszustatten?
Beispiel: for (lv = 20; lv = 0; lv --)

Das klappt leider nicht. Ist es ein Syntaxproblem oder überhaupt nicht möglich?

b. Eine Texteingabe soll auf ein Palindrom untersucht werden.
Dazu soll Zeichen für Zeichen vom Textende her in eine Charvariable ausgelesen werden und die
Charvariableninhalte wieder zu einem Text verknüpft werden

String texteingabe;
String textausgabe;
textausgabe = "";
char c = '';
int lv, laenge, zaehler;
texteingabe = tftexteingabe.getText(); // vom Textfeld
laenge = texteingabe.length();
zaehler = laenge;
for (lv = 0; lv < laenge; lv ++)
	{ 
        zaehler = zaehler - 1;
	c = texteingabe.charAt(zaehler);
        textausgabe = textausgabe + c;  // ist vermutlich so nicht möglich
        }

Überprüfung ob Texteingabe = Textausgabe

tftextausgabe.setText(textausgabe);


Ich würde mich sehr freuen, wenn sich jemand die Mühe machen würde und Tipps/Anregungen/Denkanstöße geben würde.

Dafür besten Dank im Voraus.

Gruß

Sibylle


----------



## srea (8. Jun 2010)

Sibylle hat gesagt.:


> Guten Tag,



Hi.


> zur Lösung einer kleinen Aufgabe bitte ich um mehrere Hinweise:
> 
> a. Gibt es die Möglichkeit eine For-Schleife mit einem negativen Step auszustatten?
> Beispiel: for (lv = 20; lv = 0; lv --)
> ...




```
for (int i = 10; i > 0; i --)
			System.out.println(i);
```
geht bei mir ohne Probleme. lv = 0 macht ja wenig Sinn, da er solange die Schleife durchlaufen soll wie "lv = 0" ist.



> b. Eine Texteingabe soll auf ein Palindrom untersucht werden.
> Dazu soll Zeichen für Zeichen vom Textende her in eine Charvariable ausgelesen werden und die
> Charvariableninhalte wieder zu einem Text verknüpft werden
> 
> ...




```
String texteingabe;
String textausgabe;
textausgabe = "";
char c;
int lv, laenge, zaehler;
texteingabe = tftexteingabe.getText(); 
laenge = texteingabe.length();
zaehler = laenge;

for (lv = 0; lv < laenge; lv ++) { 
    zaehler = zaehler - 1;
    c = texteingabe.charAt(zaehler);
    textausgabe = textausgabe + c;  
}

if (texteingabe.equals(textausgabe)) 
    System.out.println("Jop!");

tftextausgabe.setText(textausgabe);
```
 ???:L


----------



## Haave (8. Jun 2010)

Wie srea schon andeutete, sind hier ein paar (Denk-) Fehlerchen drin: 


Sibylle hat gesagt.:


> Beispiel: for (lv = 20; lv = 0; lv --)


1. Du initialisierst die Variable lv nicht. Schreibe 
	
	
	
	





```
int lv = 20;
```
 (ich gehe hier davon aus, dass auch weiter oben im Code das noch nicht geschehen ist).
2. Der Mittelteil ist die Bedingung, zu der die For-Schleife ausgeführt wird; die ergibt jedoch nicht besonders viel Sinn. Überleg mal: zuerst weist du der Variablen lv den Wert 20 zu und dann soll die Schleife so lange ausgeführt werden, wie lv 0 ist? Das Programm würde sofort wieder aus der Schleife austreten, da die Bedingung ja nicht erfüllt ist.
3. Grundsätzlich kannst du im dritten Teil der For-Schleife jede Operation an einer Variablen vornehmen, das beschränkt sich nicht auf lv++ und lv--. Du kannst all das schreiben, was du auch am Ende einer while-Schleife schreiben würdest, also auch kompliziertere Ausdrücke wie 
	
	
	
	





```
lv = (lv%3)+2;
```
 - vollkommen egal 

Ach ja: Formatiere deinen Code am besten immer mit den 
	
	
	
	





```
-Tags und arbeite mit Einrückungen, das macht den Code ordentlicher und leichter zu lesen.
```


----------



## Landei (8. Jun 2010)

Abgesehen von den Ausführungen meiner Vorredner: Auch wenn es hier nicht sinnvoll wäre, vergleicht man primitive Datentypen in Java mit == und nicht mit =.Ein = wird ausschließlich für Zuweisungen verwendet.


----------



## Haave (8. Jun 2010)

Landei hat gesagt.:


> Abgesehen von den Ausführungen meiner Vorredner: Auch wenn es hier nicht sinnvoll wäre, vergleicht man primitive Datentypen in Java mit == und nicht mit =.Ein = wird ausschließlich für Zuweisungen verwendet.


Landei hat Recht, darauf habe ich eben vergessen hinzuweisen. Also Ergänzung: Da du im Mittelteil eine Bedingung haben möchtest, brauchst du etwas, was am Ende einen booleschen Ausdruck ergibt - im Falle von Gleichheit sind es die doppelten Gleichheitszeichen.


----------



## Sibylle (8. Jun 2010)

srea hat gesagt.:


> Hi.
> 
> 
> 
> ...



Hi,

vielen Dank für Deine Antworten.
Der Hinweis zu Frage a. leuchtet ein, ist verstanden. Danke.


Inzwischen habe ich das Programm ein wenig umgeschrieben:

String texteingabe;
String textausgabe;

char c;
int lv, laenge, zaehler;

textausgabe = "";

texteingabe = tftexteingabe.getText();

laenge = texteingabe.length();
zaehler = laenge;
for (lv = 0; lv < laenge; lv ++)
{
	zaehler = zaehler - 1;
	c = texteingabe.charAt(zaehler);
*textausgabe.concate c*;
	}

if (texteingabe.equals(textausgabe)) 
	tftextausgabe.setText(textausgabe);
else
	tftextausgabe.setText("falsch");

Das Programm will aber dennoch nicht. Es steckt noch ein Fehler drin, der sich mir nicht zeigen will.
Hast Du einen weiteren Tipp?

Gruß
Sibylle


----------



## Haave (8. Jun 2010)

Sibylle hat gesagt.:


> Das Programm will aber dennoch nicht. Es steckt noch ein Fehler drin, der sich mir nicht zeigen will.


Wenn es ein Kompilierfehler ist, dann sollte der sich eigentlich schon zeigen. Was für eine Fehlermeldung erhältst du?


----------



## srea (8. Jun 2010)

Wie du hier sehen kannst erwartet die Methode String#concat einen String als Argument und keinen char. Diese Methode ist somit für deine Umsetzung nicht geeignet. Warum bleibst du denn nicht bei deiner vorigen Lösung?


```
String texteingabe;
		String textausgabe;

		char c;
		int lv, laenge, zaehler;

		textausgabe = "";
		texteingabe = tftexteingabe.getText();

		laenge = texteingabe.length();
		zaehler = laenge;
		
		for (lv = 0; lv < laenge; lv ++) {
			zaehler = zaehler - 1;
			c = texteingabe.charAt(zaehler);
			textausgabe += c;
		}

		if (texteingabe.equals(textausgabe))
			tftextausgabe.setText(textausgabe);
		else
			tftextausgabe.setText("falsch");
```


----------



## Sibylle (8. Jun 2010)

Hallo,

Du hast ja wirklich eine große Geduld.

Ok, den Unterschied zu concate habe ich verstanden.
Inzwischen habe ich ein wenig weiter "probiert" und festgestellt, dass der String wirklich in umgekehrter Reihenfolge erstellt wird.

Auffallend ist nun, dass im Textfeld keine Anzeige erscheint und das kann ich mir nicht erklären.
Hast Du eine Erklärung dafür?

Eine zweite Frage: Das Testen eines Programms bereitet mir erhebliche Probleme.
System.out.println(Variable); scheint wohl in einer visual class nicht zu funktionieren?
Wie also testet man den Code sinnvoll?

Viele Grüße

Sibylle


----------



## srea (8. Jun 2010)

Sibylle hat gesagt.:


> Inzwischen habe ich ein wenig weiter "probiert" und festgestellt, dass der String wirklich in umgekehrter Reihenfolge erstellt wird.
> 
> Auffallend ist nun, dass im Textfeld keine Anzeige erscheint und das kann ich mir nicht erklären.
> Hast Du eine Erklärung dafür?



Mit .setText sollte das eigentlich problemlos funktionieren. Wo ändert er bei dir denn den Text? Nach einem Button-Klick oder ähnlichem? Hier wäre ein wenig mehr Code hilfreich (in 
	
	
	
	





```
-Tags ;) )

[QUOTE]
Eine zweite Frage: Das Testen eines Programms bereitet mir erhebliche Probleme.
System.out.println(Variable); scheint wohl in einer visual class nicht zu funktionieren?
Wie also testet man den Code sinnvoll?
[/QUOTE]

Muss leider sagen, das ich nicht verstehe was du willst :(
```


----------



## Sibylle (8. Jun 2010)

Hallo,

inzwischen habe ich das Programm neu erstellt - und 
es läuft.

Ich danke Dir für Deine zahlreichen Hilfen. Ohne diese hätte es nicht geklappt.
Tausend Dank.

Einen schönen Abend.

Gruß

Sibylle


----------

