2010-07-16 4 views
1

this 문제가 발생했을 때 CodingBat 웹 사이트에서 Java 프로그래밍 기술을 연습 해 왔습니다. 여기서는 동적 길이의 정수 배열을 취하고 배열의 요소가 증가하는 순서 (1, 2, 3, 15678 등)인지 확인하고 "true를 반환하는 간단한 방법을 만들어야합니다 "true의 경우는 true, false의 경우는 false를 돌려줍니다.for 루프에서 초기화되지 않은 변수

먼저 "결과"라는 부울 변수를 초기화합니다. 그런 다음 메서드에 의해 전달 된 정수 배열을 반복합니다. 현재 인덱스 값이 다음 인덱스 값보다 작 으면 "result"를 "true"로 설정하고 루프를 반복합니다. 그렇지 않으면 "result"를 "false"로 설정하고 루프에서 빠져 나와 "result"를 "false"로 설정합니다. FOR 루프 다음에 "result"를 반환합니다.

그러나 "결과"가 제대로 초기화되지 않았다는 오류 메시지가 표시되었습니다. 나는 JVM과 혼동하는 것을 다소 이해할 수 있지만 IF/ELSE 문에서 "result"에 대한 값을 설정하면 문제가 해결 될 것이라고 생각했습니다. 여기

는 지금까지 수행 한 코드의 복사본입니다 :

public boolean scoresIncreasing(int[] scores) { 
    boolean result; 
    for (int i = 0; i < scores.length; i++) { 
     if (i < (i + 1)) { 
      result = true; 
     } 
     else { 
      result = false; 
      break; 
     } 
    } 
    return result; 
} 

답변

2

첫째, 난 < 나는 + 1은 항상 true가됩니다.

원하는 점수 [i]가 < [i + 1]이고 마지막 반복에서 인덱스가 범위를 벗어나지 않도록 루프 값을 조정해야합니다.

그래서, 코드를 수정 :

public boolean scoresIncreasing(int[] scores) { 
    boolean result; 
    for (int i = 0; i < scores.length-1; i++) // fix loop end 
    { 
     if (scores[i] < scores[(i + 1)]) { 
      result = true; 
     } 
     else { 
      result = false; 
      break; 
     } 
    } // missing brace 
    return result; 
} 

는 대안으로이보십시오. 일단 거짓을 알게되면 즉시 나간다는 원칙에 따라 작동합니다.

public boolean scoresIncreasing(int[] scores) { 
    boolean result = true; // assume true 
    for (int i = 0; i < scores.length-1; i++) // fix loop end 
    { 
     if (scores[i] > scores[(i + 1)]) return false; 
    } // missing brace 
    return result; 
} 

물론 처음부터 경계 검사를 도입하여 값이 두 개 이상 있는지 확인하는 것이 좋습니다.

0

무엇 점수의 경우 0 요소가? ;]

+1

문제 설명은 다음과 같이 표시됩니다. * 배열의 길이는 2 이상이됩니다. * –

0

코드에서 if 루프 내에서 결과를 반환합니다 (if-else 문 이후).

return 문 전에 다른 브래킷을 추가 당신은 단순히 return result 전에 닫는 중괄호 (}를) 누락

1

을 (루프의 닫습니다).

코드를 단순화하고 0 요소의 배열을 다루는 제안으로 resulttrue으로 초기화 할 수 있습니다. 그런 다음 배열을 반복 할 때 요소가 잘못 발견 된 경우에만 resultfalse으로 변경하십시오.

다른주의 사항. for 루프에 요소 i + 1을 사용합니다. 배열의 마지막 요소 (i == scores.length - 1)를 얻었을 때 어떤 일이 일어나는지 생각해보십시오.

+0

웁스! 나는 그 마지막 부분을 완전히 놓쳤다! 나는 그것을 내 코드에서 고칠 것이다. 팁 고마워! – Jules

+0

바트 언급했듯이 배열 요소 ('scores [i]'), * i *'i '자체를 바꾸지 않도록하십시오. –

1

if (i < (i + 1))은 항상 true으로 평가됩니다. 배열 자체의 인덱스가 아닌 해당 인덱스에서 내용을 비교해야합니다. 같은

뭔가 : 난 = Integer.maxValue이있는 경우에 당신이 Integer.minValue에 랩 어라운드 있습니다하지 않는 한 모든

public boolean scoresIncreasing(int[] scores) { 
    for(int i = 0; i < scores.length-1; i++) { 
    if(scores[i] > scores[i+1]) return false; 
    } 
    return true; 
} 
+0

달콤한, 그 일했다! 팁 고마워! – Jules