webForumDet fria alternativet

For-loop

Java

5 svar · 370 visningar · startad av PersianBulldog

Medlem sedan aug. 20023 005 inlägg
Frågan#1

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;
Medlem sedan dec. 20025 483 inlägg
#2

Som en loop vars syfte är att undersöka huruvida en sträng är ett palindrom.

:)

Medlem sedan aug. 20023 005 inlägg
#3

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?

Medlem sedan dec. 20003 563 inlägg
#4

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.

Medlem sedan dec. 20025 483 inlägg
#5

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.

:)

Medlem sedan aug. 20023 005 inlägg
#6

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

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)