저는 프로그래머 애호가이며 약 한 달 동안 Java를 배우고 있습니다. 그래서, 나는 r/dailyprogramming을 통해 제공되는 문제에 착수하기로 결정했습니다. 링크는 관심있는 것들에 대한 아래 : Java 중첩 for-loop breaking abruptly
http://www.reddit.com/r/dailyprogrammer/comments/2nynip/2014121_challenge_191_easy_word_counting/
은 지금까지 나는 갈라라는 문자열 배열로 단어를 갈라있다. 단어는 모두 대소 문자와 마침표, 쉼표 및 다른 일반적인 구두점을 사용하여 소문자로 채워집니다. 현재 null이 아닌 배열의 첫 번째 단어를 가져 와서 각 요소를 확인하고 각 경우에 대해 계산하여 각 단어의 발생 수를 계산하려고합니다. 루프와 if 문을 중첩하여이 작업을 수행했습니다. 그러나 프로그램은 오류를 반환하지 않고 갑자기 중지합니다. 왜 누군가가 내 코드가 갑자기 멈추는 지 설명 할 수 있기를 바랍니다.모든 부분이 코드의이 부분까지 제대로 작동합니다.
for (int i = 0; i < splitted.length; i++) {
if (splitted[i] != null) {
word = splitted[i];
System.out.println("Word is: " + word);
for (int j = i; j < splitted.length; j++) {
if (splitted[j].contains(word)) {
splitted[j] = null;
count++;
}
}
System.out.println(word + ": " + count);
count = 0;
}
}
출력이 다른 수정 된 코드입니다. 내가 배열 길이를 확인하고 그것이 밖으로 바인딩되지 않습니다.
for (int i = 0; i < splitted.length; i++) {
if (splitted[i] != null) {
word = splitted[i];
System.out.println("Word is: " + word);
for (int j = i; j < splitted.length; j++) {
System.out.printf("%d %s %B%n", j, splitted[j], splitted[j].contains(word));
if (splitted[j].contains(word)) {
splitted[j] = null;
count++;
}
System.out.println(j + " is less than " + splitted.length);
}
System.out.println(word + ": " + count);
count = 0;
}
System.out.println(splitted[i] + " " + i);
}
편집보다 선명도 : 문제는 급격 splitted.length 미만 인 J 불구 배열 널 요소를 확인한 후 정지 프로그램이다.
출력 :
Today was great hello stupid Today. Today was bad. Today was amazing. He is great. He was bad. Now he is great!
Word is: today
0 today TRUE
0 is less than 22
1 was FALSE
1 is less than 22
2 great FALSE
2 is less than 22
3 hello FALSE
3 is less than 22
4 stupid FALSE
4 is less than 22
5 today TRUE
5 is less than 22
6 today TRUE
6 is less than 22
7 was FALSE
7 is less than 22
8 bad FALSE
8 is less than 22
9 today TRUE
9 is less than 22
10 was FALSE
10 is less than 22
11 amazing FALSE
11 is less than 22
12 he FALSE
12 is less than 22
13 is FALSE
13 is less than 22
14 great FALSE
14 is less than 22
15 he FALSE
15 is less than 22
16 was FALSE
16 is less than 22
17 bad FALSE
17 is less than 22
18 now FALSE
18 is less than 22
19 he FALSE
19 is less than 22
20 is FALSE
20 is less than 22
21 great FALSE
21 is less than 22
today: 4
null 0
Word is: was
1 was TRUE
1 is less than 22
2 great FALSE
2 is less than 22
3 hello FALSE
3 is less than 22
4 stupid FALSE
4 is less than 22
감사합니다,
출력 결과를 표시 할 수 있습니까? 코드가 멈추는 원인은 무엇이라고 생각하십니까? –
split [j]가 null로 설정된 경우 (코드에서 발생), 다음에 splitted [j]가 발생할 때 null 포인터 예외에서 split [j] .contains (word)가 중지됩니다. – user2533521
문법 경찰 : "split"은 단순 과거와 과거 분사가 "split"("split"되지 않음) 인 불규칙 동사입니다. – xpa1492