Hur tolkar övriga programmerare följande kodsnutt?
for (foo=0 ; foo < bar.length()/2 ; ++foo )
if (bar.charAt(foo) != bar.charAt(bar.length()-1-foo) )
comparison=false;
5 svar · 368 visningar · startad av PersianBulldog
Hur tolkar övriga programmerare följande kodsnutt?
for (foo=0 ; foo < bar.length()/2 ; ++foo )
if (bar.charAt(foo) != bar.charAt(bar.length()-1-foo) )
comparison=false;
Tack för ditt svar, Peter. :)
Kan du ge en lite mer ingående förklaring i hur du märkte det? Är det så att:
foo nollställs för att som en räknare placeras i strängens första position? Vad händer sen?
foo=0 ; foo < bar.length()/2 ; ++foo
forloopen ska snurra hälften av längden på strängen bar.
bar.charAt(foo) != bar.charAt(bar.length()-1-foo)
Vi jämför tecken "foo" med tecken sista tecken i bar, minus "foo". Alltså kommer det alltid jämföras tecken för tecken början utifrån mot mitten.
Där kommer man på varför loopen går bara till mitten.
if (ovan)
Såfort två tecken inte stämmer överens sätts comparison = false. Alltså ett test om bar = palindrom.
Jag började med att konstatera att loopen endast kommer att köras strängens längd dividerat med två gånger.
Därefter insåg jag att vänsterledet i jämförelseuttrycket kontrollerar första halvan i stigande positionsordning av strängen, samt högerledet den andra halvan i fallande.
:)
En eloge och ett stort tack till Daniel och Peter för den fina beskrivningen. :)
Tyvärr kan jag inte acceptera båda svaren, så jag tar den som postades först.
R. Martin? :OO