2014-10-06 5 views
0

두 개의 배열이 있다고 가정 해 봅시다.다른 배열에있는 배열의 특정 요소를 유지하십시오.

Integer[] array= { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 200, 5, 6, 5 }; 
Integer[] array2= { 12, 2 ,3, 2, 200, 5 }; 

임 배열 2에서도 현재에있는 사람들을 제외하고 분리 한 모든 요소 배열을 반환하는 방법을 만들려고 노력하는, 그래서이 방법의 출력은 내가 원하는 해달라고

{2 ,3, 5, 200, 5, 5 } 

해야한다 다른 데이터 구조를 사용하고 어떻게 일을하려고 무엇 메신저 코드에 아무 생각이 없습니다, 메신저 난 결과 배열 길이를 따지기 수있는 방법을 잘

감사

+1

어떻게 하시겠습니까 _ 개념적으로? –

+3

_ "나는 무엇을하려고 하는지를 어떻게 코딩해야할지 모르겠다."_ 잠깐 시간을내어 코드 외부에서 생각해보고 생각한 것과 일치하는 코드를 작성하십시오. 그대로, 숙제 문제와 같은 것 같습니다 ... – Krease

+0

가능한 두 개의 공통 요소 [중복 목록] (http://stackoverflow.com/questions/5943330/common-elements-in-two-lists) –

답변

1

하는 경우 귀하의 질문을 이해하면 contains(Integer[], Integer) 방법을 작성하여 시작할 수 있습니다. 배열을 반복하고 배열에 값이 있으면 true을 반환합니다.

private static boolean contains(Integer[] a, Integer v) { 
    for (Integer t : a) { 
     if (t.equals(v)) { 
      return true; 
     } 
    } 
    return false; 
} 

그런 다음이를 활용하여 배열을 두 번 반복 할 수 있습니다. 한 번 계산을 수행하고 두 번째로 새로 작성한 배열에 count 요소를 채 웁니다.

public static void main(String[] args) { 
    Integer[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 200, 5, 6, 5 }; 
    Integer[] array2 = { 12, 2, 3, 2, 200, 5 }; 
    System.out.println(Arrays.toString(retainAll(array, array2))); 
} 

출력이

[2, 3, 5, 200, 5, 5] 

물론 요청

public static Integer[] retainAll(Integer[] a, Integer[] b) { 
    int count = 0; 
    for (Integer val : a) { 
     if (contains(b, val)) { 
      count++; 
     } 
    } 
    Integer[] out = new Integer[count]; 
    count = 0; 
    for (Integer val : a) { 
     if (contains(b, val)) { 
      out[count++] = val; 
     } 
    } 
    return out; 
} 

그 다음을 테스트 할 수

, 뭔가 등이, 당신은 또한

public static Integer[] retainAll(Integer[] a, Integer[] b) { 
    List<Integer> al = new ArrayList<>(Arrays.asList(a)); 
    al.retainAll(Arrays.asList(b)); 
    return al.toArray(new Integer[al.size()]); 
} 
+0

고맙지 만 Integer val이란 무엇입니까? –

+1

@BobJ ['For-Each' Loop] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html)입니다. –

+0

@BobJ - 내 코드는 Eliotts와 거의 같습니다. 단, 사소한 수표와 중복을 제거하기위한 추가 방법이 있습니다. –

2
처럼 Arrays.asList(T...)retainAll()을 사용할 수 있습니다

배열 만 사용하고 다른 데이터 구조는 전혀 사용하지 않는 솔루션입니다. retainAll 메서드는 일부 null이 포함 된 배열을 반환합니다. 해당 배열을 사용하고 null이없는 배열을 만들 수있는 코드를 만들 수 있습니다. 정말 쉽습니다.

import java.util.Arrays; 

public class Test { 

    public static void main(String[] args) { 
     Integer[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 200, 5, 6, 5 }; 
     Integer[] array2 = { 12, 2, 3, 2, 200, 5 }; 

     Integer[] res = retainAll(array, array2); 
     String str = Arrays.toString(res); 
     System.out.println(str); 
     res = removeArrayDuplicates(res); 
     str = Arrays.toString(res); 
     System.out.println(str); 

    } 

    public static Integer[] retainAll(Integer[] a, Integer[] b) { 

     int ln1 = a.length; 
     int ln2 = b.length; 

     Integer[] res = new Integer[(ln1 < ln2) ? ln1 : ln2]; 
     Integer[] small = (ln1 < ln2) ? a : b; 
     Integer[] big = (ln1 < ln2) ? b : a; 

     boolean found = false; 

     for (int i = 0; i < small.length; i++) { 
      found = arrayContains(big, small[i]); 
      if (found == true) { 
       res[i] = small[i]; 
      } 

     } 

     return res; 

    } 

    public static Integer[] removeArrayDuplicates(Integer[] a) { 

     int len = a.length; 
     int dups = 0; 
     boolean noNulls = false; 

     for (int i = 0; i < len; i++) { 

      for (int j = i + 1; j < len; j++) { 

       noNulls = a[i] != null && a[j] != null; 

       if (noNulls && a[i].equals(a[j])) { 
        a[j] = null; 
        dups++; 
       } 
      } 

     } 

     return a; 

    } 

    public static boolean arrayContains(Object[] a, Integer b) { 
     boolean contains = false; 

     for (Object c : a) { 
      if (c != null && c.equals(b)) { 
       contains = true; 
       break; 
      } 
     } 

     return contains; 
    } 

} 
관련 문제