| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

ich hab mal wieder mehrere Fragen zu einem Quellcode mit IndexOf();

1. String pana = "Panamakanal";
2.
3. int counter = 0;
4.
5. for (int i = 0; i != -1;)
6. {
7. i = pana.indexOf("a", i);
8. if (i != -1)
9. {
10. counter++;
11. System.out.println("Ein 'a' an Stelle " + ++i);
12. }
13. System.out.println("Insgesamt " + counter + " a im " + pana);
14. }
15. }

Zeile 5 ==> Dies ist ja eigentlich eine Endlosschleife,weil das Schleifen Inkrement ja fehlt...
D.h. wenn der Buchstabe P folgt wird die for Schleife bearbeitet...Zeile 7 sagt es ist kein a und gibt an i = -1 zurück...damit wird in Zeile 8 die if-Anweisung nicht bearbeitet....
dann gehen wir wieder zu Zeile 5 der for-Schleife ==> Bedingung nicht erfüllt...und zählen 1 weiter dann folgt der Buchstabe a...Zeile 7 gibt 1 zurück und die if-Schleife wird bearbeitet...also das erste mal a vom Wort gezählt...Dann wieder zurück zu Zeile 5 wo die Bedingung eigentlich erfüllt wäre und die for-Schleife stoppen würde?????? Da es aber Funktioniert habe ich einen Gedankenfehler????
Woher weiß die for-Schleife wann das Wort zu Ende ist...so das die for-Schleife endet...
Denn sonst wäre es nicht möglich das das Programm in Zeile 13 springt...
Zeile 11 ==> Das ++i gibt doch nur die Position des a wieder...da ++ vor dem i steht wird i erst um 1 erhöht und dann die position ausgegeben...Das liegt daran das wir mit 0 anfangen zu zählen und nicht mit 1...
Für mich wäre es jetzt logisch gewesen wenn ich das ++ vorm i entferne und dann hätte ich die Ausgabe 1,3 usw...anstatt 2,4 usw...
Aber ich bekam eine Endlosschleife so dass permanent 1 eingeschrieben wurde...Das versteh ich jetzt überhaupt nicht???
Könnt ihr mir das mal erläutern...
Danke schon mal im voraus...
Gruss
Snowleopard88
16.06.2013
snowleopard88 16 4
Mir fällt grad auf, dass genau diese Frage schon einmal gestellt wurde... ich will hier niemanden etwas unterstellen, aber der Benutzernamen lässt auch darauf schließen, dass es sich um ein und dieselbe person handelt:
http://codekicker.de/fragen/Programm-erlaeutern
Karill Endusa 18.06.2013
Oder beide haben das gleiche (nicht ganz so empfehlenswerte) Buch und sind Baujahr 88 ;)
phg 18.06.2013
1 Antwort
1
Ich kann deiner Beschreibung des Codes nicht so ganz folgen; aber ich denke, dein wesentliches Verständnisproblem liegt bei der indexOf-Methode - hier findest du eine gute Beschreibung dazu.
Kurz gesagt: mit indexOf(string, int) prüfst du nicht nur das i-te Zeichen, sondern alle bis zum nächsten 'a', falls es denn eines gibt.
Der Parameter i ist hier die Startposition, ab der gesucht wird und der Returncode i die gefundene Position (oder -1). Wenn du nun das ++ vor dem i in Zeile 11 entfernst, wird immer wieder ab der Stelle gesucht, an der bereits ein 'a' gefunden wurde - das ist dann die befürchtete Endlosschleife, weil i nicht mehr verändert wird.

Generell halte ich es aber für keinen guten Programmierstil, wenn die Schleifenvariable innerhalb der Schleife verändert wird und das auch noch abhängig von irgendwelchen Bedingungen. Die Gefahr von Endlosschleifen oder anderen ungewollten Effekten ist da sehr groß. Auch wenn es im abgebildeten Fall klappt - Verständnisprobleme sind ganz offensichtlich schnell da und damit auch Fehler.
16.06.2013
jsc 289 1 7

Stelle deine Java-Frage jetzt!