2016-11-21 3 views
0

테스트 테이블 첨부 파일에 표시된 첫 번째 테스트 실행에 대해 false를 반환하는 이유가 확실하지 않습니다. 지난 학기의 과제 중 하나 였지만 해결 방법을 찾지 못했습니다 :/나의 과제는 다음과 같습니다 :잘못된 출력을 반환하는 이유는 무엇입니까?

두 개의 매개 변수가 같은 크기의 정수 배열 인 oddsMatchEvens 메서드의 정의를 작성합니다. 각 배열의 크기는 짝수입니다. 이 메소드는 첫 번째 배열의 짝수 색인 요소가 두 번째 요소의 홀수 색인 요소와 동일한 경우에만 true를 반환합니다. 즉, w가 첫 번째 배열이고 q가 두 번째 배열 인 경우 w[0]q[1]이고, w[2]q[3]과 같습니다.

테스트 테이블

enter image description here

내 코드가 있었다 : 당신은 당신이 비교에만 w.length/2 인덱스를 갖고 있기 때문에

public boolean oddsMatchEvens(int[] w, int[] q) { 
    int count = 0; 

    for (int i = 0; i < w.length; i++) { 
     if (w[i] == q[i + 1]) 
      count++; 

     if (count == (w.length - 1)) 
      return true;  
    } 
    return false; 
} 
+0

를 어느 시점 배열, Q에서 아웃 오브 바운드하게 될합니다. 루프는'i = 0; i Michael

+0

에서 갈 필요가 없습니다. 왜냐하면 그는 i Kryptur

+0

을 사용하기 때문에 그는 i + 1에서 q에 액세스하고 있습니다. – Michael

답변

0
if (count == (w.length - 1)) 
    return true; 

이것은 잘못이다.

w [i]! = q [i + 1]이면 false를 반환해야합니다.

그리고 당신은하지 않음으로써, 2 전을 증가해야 1.

0

이 코드 두 가지 문제점은 다음과 같습니다 는 첫째, 명확하게 두 개의 입력 배열이 동일한 길이 있습니다 언급은하고 심지어 비교해야 홀수 색인에 색인하십시오. 따라서 첫 번째 배열의 마지막 항목을 두 번째 배열의 마지막 + 1 항목 (배열의 길이가 같기 때문에 존재하지 않음)로 검사 할 때 대소 문자가 발생합니다. 둘째, 두 번째 배열이 홀수 인 경우에도 첫 번째 배열을 검사해야합니다 증가 내가 + = 2가 아니라 내가 ++해야한다 최적화 수정 코드 (한 검사가 실패 할 경우 루프에서 올 수 있습니다).

public boolean oddsMatchEvens(int[] w, int[] q) { 
    for (int i = 0; i < w.length-1; i+=2) { 

     if (w[i] != q[i + 1]) 
      return false; 
     else 
      continue; 
    } 

    return true; 
} 
관련 문제