2014-03-07 2 views
0

자바 프로그램에서 작업하고 있지만이 특정 섹션에 붙어 있습니다. 이 함수는 배열을 입력으로 사용하여 입력 배열에서 target이 처음 나타나는 인덱스를 반환합니다. 발견되지 않으면 -1을 반환합니다. 이 함수는 내 contains 메소드를 호출한다고 가정합니다.주어진 매개 변수를 사용하여 배열 색인 찾기

는()

public static boolean contains(int[] input, int target) { 
     for(int i = 0; i < input.length; i++){ 
      if (target == input[i]){ 

       return true; 
      } 
     } 
     return false; 
    } 

같이 IndexOf()을 포함

public static int indexOf(int[] input, int target) { 
     if(contains(input, target) == true){ 
      return i; 
     } 
     return -1; 
    } 

나는 내가이 방법을 포함에 변수 무슨 반환 노력하고 있어요,하지만 난 변수를 만드는 방법을 잘 모르겠어요 나는 생성자에서 public int를 만들지 않고 contains 메서드에서 indexof 메서드로 전송합니다. 당신의 도움을 주셔서 감사합니다.

---------- EDIT ---------- contains 메서드는 지정된 배열에서 대상 값을 검색한다고 가정합니다. 타겟 치가 배열의 어딘가에 존재하는 경우는 true를 돌려줍니다. 그렇지 않은 경우 false를 반환합니다. contains 메소드에 변경을 가할 필요가있는 경우는, 그 변경도 포함 할 수 있습니다.

+0

? 그것은 과장된 것 같습니다. – Tyler

+0

그건 내가 생각한 것이지만 필요하다. –

+0

인덱스를 포함하고 있습니다. 즉, contains 메소드 내에있는 경우, 또는 발견되지 않는 경우는 -1을 돌려줍니다. 왜 색인이 필요합니까? – Amar

답변

1

변수가 존재하는지 확인하기 위해 contains()를 사용하여 indexOf()에서 검사를 수행하는 것이 유일한 방법입니다.

public static boolean contains(int[] input, int target) { 
    for(int i = 0; i < input.length; i++){ 
     if (target == input[i]){ 
      return true; 
     } 
    } 
    return false; 
} 

public static int indexOf(int[] input, int target) { 

    //If the value isn't there, return -1 
    if(contains(input, target) == false){ 
     return -1; 
    } 

    //Go find the value if we know it is in there 
    for(int i = 0; i < input.length; i++){ 
     if (target == input[i]){ 
      return i; 
     } 
    } 
    //We should never get here 
    return -1; 
} 
+0

이것은 지금 당연한 유일한 것입니다. 강사는 contains 메소드를 어떻게 사용해야하는지 말하지 않았으므로 이것이 괜찮을 것이라고 생각합니다. 고맙습니다! –

+0

당신을 진심으로 환영합니다. 그리고 당신 말이 맞습니다. 배열을 두 번 반복하는 것은별로 의미가 없습니다. – Tyler

1

indexOfcontains과 비슷해야합니다. 실제로, 그들은 당신이 갖고있는 것에서 전환해야합니다 :

public static int indexOf(int[] input, int target) { 
     for(int i = 0; i < input.length; i++){ 
      if (target == input[i]){ 
       return i; 
      } 
     } 
     return -1; 
    } 

public static boolean contains(int[] input, int target) { 
     if(indexOf(input, target) >= 0){ 
      return true; 
     } 
     return false; 
    } 
+0

contains 메서드를 indexOf 메서드로 호출해야합니다. –

1

당신은 이것을 뒤로 할 가능성이 있습니다. 강사가 숙제에 오타가 있거나 잘못 읽거나 오해 한 것입니다.

contains() 메서드가 indexOf() 메서드를 사용하는 것이 더 합리적입니다. 이 방법은 알아 내기가 쉽습니다.

+0

"이미 위에서 작성한 contains를 호출하여이 indexOf() 함수를 빌드하십시오." 나는 이미 그에게 이메일을 보냈고 오타를 만들지 않았다. –

0

할 수있는 또 다른 방법은 static 변수가 대상의 인덱스와 동일 설정하는 것입니다. code는 다음과 같습니다 :

import java.util.*; 
import java.lang.*; 
import java.io.*; 


class TargetSearch 
{ 
private static int posOfTarget; 
public static void main (String[] args) throws java.lang.Exception 
{ 
    int [] arr = {1,2,3,4,5,6}; 
    int target = 5; 
    if(contains(arr,target)){ 
     System.out.println(target+" found at pos " + getPosOfTarget()+1); 
    } 
    else 
     System.out.println(target+" doesn't exist in arr "); 
} 

public static boolean contains(int[] input, int target) { 
for(int i = 0; i < input.length; i++){ 
    if (target == input[i]){ 
     setPosofTarget(i); 
     return true; 
    } 
} 
return false; 
} 

public static int indexOf(int[] input, int target) { 
    if(contains(input, target) == true){ 
     //pos is already set in contains() 
     return (getPosOfTarget()); 
    } 
    else 
     return -1; 
} 

//getter setter of pos 
public static int getPosOfTarget(){ 
    return posOfTarget; 
}; 
public static void setPosofTarget(int i){ 
    posOfTarget = i; 
}; 

}

당신은() 메소드를 포함 사용할 필요가
관련 문제