Hallo Java-Cracks,
meine Schleife soll die Position d. letzten Vokals im Array finden.
Java:
publicstaticintpositionSuchen(String string){String s = string;int position =-1;//Indexstart bei 0, d.h. 0 entspricht dem ersten Vokalfor(int i =0; i < s.length(); i++){char buchstabe = s.charAt(i);if((buchstabe =='a')^(buchstabe =='A')^(buchstabe =='e')^(buchstabe =='E')^(buchstabe =='i')^(buchstabe =='I')^(buchstabe =='o')^(buchstabe =='O')^(buchstabe =='u')^(buchstabe =='U')){
position ++;}}return vokalPosition;}publicstaticvoidmain(String[] args){System.out.println("Die Indexposition des letzten Vokals im String 'aöüäuäüö' ist "+positionSuchen("aöüäuäüö"));
Der 4. Index entspricht dem 5. und letzten Vokal, das Ergebnis muss lauten 4! Überraschung, ist aber natürlich 5... aber wieso? position wird doch nur erhöht, wenn es sich um einen Vokal handelt, oder was habe ich übersehen?
ob XOR oder "oder" ist in diesem Fall doch wurscht, oder? gibt doch eh nur einen char an der entsprechenden stelle. hatte vorher || , wollt aber mal das andere nutzen
func suchen (String s)for( i = s.Länge -1; i >=0; i--)// i runter zählen ... weil von rechts nach links suchen{if( ist ein Vokal){return i;// falls einer gefunden wurde brichst du hier durch return ab... hupfst ja aus der Methode raus}}return-1;// falls keiner Gefunden wurde !.. bist ja nicht aus der methode raus gekommen...}......
func aufruf (){int position = suchen (" .... ")if( position >=0)Sysout(" Vokal gefunden ")elseSysout("Kein Vokal :(")}
versuch es erstmal selber auszuprobieren
bitte schau den spoiler an falls du es selber probiert hast !
EDIT :
return i;
muss
return i +1; sein falls du die "normale position willst"
publicstaticintsuchen(String s){for(int i = s.length()-1; i >=0; i--){char buchstabe = s.charAt(i);if((buchstabe =='a')^(buchstabe =='A')^(buchstabe =='e')^(buchstabe =='E')^(buchstabe =='i')^(buchstabe =='I')^(buchstabe =='o')^(buchstabe =='O')^(buchstabe =='u')^(buchstabe =='U')){return i +1;}}return-1;// kann auch 0 sein wenn du das mit i +1 machst}
es ist eine kunst probleme andersherum zu sehen ... und plötzlich wirds einfacher.. keine unnötigen counter mehr
aber den dreh hast du irgendwann raus.... und wenn du ihn raus hast wirst du wahrschienlich nur noch for each schleifen benutzen das ist das deprimierende dran
Von den ganzen buchstabe == -Teilbedingungen kann ja höchsten eine true ergeben. Deshalb kommt hier bei OR und XOR dasselbe raus. Mit XOR ist das natürlich trotzdem furchtbarer Stil.
"^^" gibt es nicht als Operator und man kann auch nicht zwei "^" direkt hintereinander hängen. Anders als bei | und & gibt es bei ^ keinen Unterschied zwischen dem booleschen und dem Bitmanipulationsoperator.
^ in Java is the exclusive-or ("xor") operator....More simply, you can also think of xor as "this [I]or[/I] that, but [I]not both[/I]!"
Java:
OperatorNameExampleResultDescription
a & b and 3&511if both bits are 1.
a | b or 3|571if either bit is 1.
a ^ b xor 3^561if both bits are different.~a not ~3-4Inverts the bits.
n << p left shift 3<<212Shifts the bits of n left p positions.Zero bits are shifted into the low-order positions.
n >> p right shift 5>>21Shifts the bits of n right p positions.If n is a 2's complement signed number, the sign bit is shifted into the high-order positions.
n >>> p right shift -4>>>2815Shifts the bits of n right p positions.Zeros are shifted into the high-order positions.
Nochmal zum ursprünglichen Problem. Der gepostete Code gibt nicht 5 zurück sondern 1. Denn es wird pro Vokal das position++ aufgerufen. Also ändert sich position von -1 auf 0 (beim Durchgang für "a") und dann auf 1 (beim Durchgang für "u").
Unter der Annahme, dass beim Copy/Paste bzw. editieren aus Versehen return vokalPosition; geschrieben wurde und return position; gemeint war.
Sollte das stimmen ist die eigentliche Lösung des Problems: Nicht pro Vokal die position erhöhen, sondern darin den aktuellen index i speichern.