2014-11-18 2 views
0

코드를보고 의견을 말하십시오. 내 디버거에서도 102 == 102로 표시되어 나를 거짓으로 표시합니다 ... 상상할 수 있습니까?믿을 수없는 Java 동등 테스트 오류

import java.util.Arrays; 

/** 
* Created by Idris on 18/11/14. 
*/ 
public class codingGame { 


    static boolean exists(int[] ints, int k) { 

     Integer j = ints[ints.length/2]; 
     if (j.equals(k)){ 
      return true; 
     } 

     if (ints.length == 1) return false; 


     if (k > j) { 
      int[] intb = Arrays.copyOfRange(ints, ints.length/2, ints.length); 
      exists(intb, k); 

     } 

     if (k < j) { 
      int[] intb = Arrays.copyOfRange(ints, 0, ints.length/2); 
      exists(intb, k); 

     } 

     return false; 
    } 

    public static void main (String[] args) { 

     int[] ints = {-9, 14, 37, 102}; 
     System.out.println(exists(ints, 102)); // true 
     System.out.println(exists(ints, 36)); // false 

    } 

} 
+3

함수는 호출 된 함수를 자동으로 반환하지 않습니다. – user2357112

+0

또한 '정수'는 'int'가 아닙니다. 이건 중요하다. – user2357112

+0

'// true' 대신'false /'를 쓰거나 실제가 아닌 예상됨을 나타낼 수도 있습니다. –

답변

5

당신은 재귀에 대해 return 진술을 잊어 버렸습니다. 재귀 내에서 발생할 수있는 true를 반환하려면 return exists(intb, k);을 사용해야하며 그렇지 않은 경우 j.equals(k)이 false이면 코드는 항상 false를 반환합니다.

static boolean exists(int[] ints, int k) { 

    Integer j = ints[ints.length/2]; 
    if (j.equals(k)){ 
     return true; 
    } 

    if (ints.length == 1) return false; 


    if (k > j) { 
     int[] intb = Arrays.copyOfRange(ints, ints.length/2, ints.length); 
     return exists(intb, k); 

    } 

    if (k < j) { 
     int[] intb = Arrays.copyOfRange(ints, 0, ints.length/2); 
     return exists(intb, k); 

    } 

    return false; 
}