당신은 당신이
while (n-- != 0) { // WTF???
이 예제가 어떻게 작동하는지
System.out.println("outside loop");
while (n-- != 0) { // WTF???
System.out.println("inside loop: comparing "
+ searchMe.charAt(j) + ":" + substring.charAt(k));
보고로 대체 할 수있다 : BTW,이 자바 SE 튜토리얼에서 불과 예제 프로그램입니다. 아래는 설명이 거의 없습니다.
이 코드는 searchMe
문자열에 substring
을 찾고있다. 당신이 searchMe
에 위치 0에서 문자를 비교하면
Look for a substring in me
^
sub
및 substring
당신은 그들이 같은 L
아니라는 것을 알 = s
그래서 우리는 문자의 나머지 부분을 일치 건너 뛸 수 있습니다 및 다음으로 이동 :이 예에서 살펴 보자! 위치 (즉, continue test;
의 목적이다)
Look for a substring in me
^
sub
그래서 지금 우리가 substring
의 첫 글자와 searchMe
의 첫 번째 문자와 다음 문자를 비교하려고합니다. 우리가 o
얻을이 시간! = s
그래서 문자열이 곳에서 시작하는 것이 방법이 없습니다에 수행 할 수 있습니다.
몇 비교 후 우리는 마침내 약속 장소를 발견
substring
의 첫 글자가
searchMe
(
s
==
s
)에서 현재 편지와 동일합니다 그래서 우리는 아직
while
루프에서 점프를 못해 및하려고합니다
Look for a substring in me
^
sub
다음 편지를 확인하십시오. 그리고 우리는 우리가 다음 단계에서 일어날 수있는 우리의 전체 substring
반복 될 때까지, 그래서 우리는 우리의 루프를 계속
Look for a substring in me
^
sub
== u
u
때문에 또 다른 성공을 가지고있다.
Look for a substring in me
^
sub
우리가
b
와
b
을 비교하여이 시간. 그들은 동등하고 우리는
substring
에 더 많은 문자가 없기 때문에
foundIt
의 값을
true
으로 설정하고 루프를 위해
test
을 제동 할 수 있습니다.
그리고 끝입니다.
당신이 substring
에 첫 번째 문자로 s
일치합니다 Look for a
프로그램을 확인 후 귀하의 경우 substring
의 첫 글자와 일치합니다 첫 번째 문자를 찾을 수 귀하의 코드에서 당신이 즉시 긍정적 인 반응을 얻을 것이다 동안 제거 할 경우 또한 s
이됩니다.
while 루프는 여기에서 전체 substring
을 반복하는 데 사용되며 일치하는 문자가 일치하지 않는 경우에만 한 위치 앞으로 이동합니다. 이 내부 루프를 무시하고 전체 데이터를 반복하면 aab
을 aaab
문자열로 찾는 것과 같은 긍정적 인 결과를 무시할 수 있습니다.
aaab
aab
^^
^
이 일치 봐 그러나 그 후 우리는 실패합니다 b
와 a
과 일치해야합니다. 마지막
aaab
aab
^
우리가 a*aab*
부분을 생략 우리는 또한 그래서 하위 문자열에 대한 일치를 찾지 못했습니다이 시간이 될 것이다 실패 위치를 확인에서 내부 while 루프없이 우리는 아마 다른 경기를 시작합니다.
'n'은'substring.length()'에서'0'으로 카운트 다운됩니다. – MadProgrammer
@MadProgrammer는 일반적으로 yes이지만'continue test;'while은 쉽지 않습니다 ... – Pshemo
@MadProgrammer Idol 그렇게 생각하면 b/c 그러면이 루프는 3 번만 실행되지만 하위 문자열이 발견 될 때까지 계속 진행됩니다. 또한 while 루프를 빼내면 (적절한 괄호 포함) 프로그램의 결과는 같습니다. 그들이 그것을 넣은 유효한 이유가 있어야합니다. – VisWebsoft