자바에서 클래스 필드 비교 하려고 하는데 질문이요

조회수 797회

public class Number {

    int[] array0 = new int[]{2,7,19,25,29,36,16};
    int[] array1 = new int[]{2,10,12,31,33,42,32};
    int[] array2 = new int[]{3,8,19,27,30,41,12};
    int[] array3 = new int[]{2,6,7,12,19,45,38};
    int[] array4 = new int[]{2,10,11,19,35,39,29};
    int[] array5 = new int[]{5,6,13,16,27,28,9};
    int[] array6 = new int[]{12,15,16,20,24,30,38};
    int[] array7 = new int[]{4,6,15,25,26,33,40};

}

public class getnum {

public static void main(String[] args) {
    // TODO Auto-generated method stub


    Number Num = new Number();

    int[] lonum = new int[Num.array0.length];

    System.arraycopy( Num.array0, 0, lonum, 0, Num.array0.length );

            int[] temp = new int[]{1,2,3,4,5,6};

            Arrays.equals(lotnum, temp);
    }

제가 하고 싶은것은 Number클래스의 필드와 temp의 값을 비교 하고 싶은데 필드 하나하나를 비교 해야 하는건가요? for문으로 해결할수 있는지 궁금합니다. 사실 700개를 비교할 예정인데 개념이 안잡히네요 초보입니다

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • for문으로 돌리려면 최소한 Num.~필드에 접근을 해야하는데 배열이 여러개(즉, 이름이 다른 배열이 많음)이기때문에 for( i=0~~~)이런식으로 시작한다면, 개인적으론 어려울 것 같습니다. Number클래스안에 있는 배열을 2차원 배열로 만들어 보시면 어떠실까요? 그럼 for문을 사용할때 최소한 Num.array[i][j] 이런식으로 접근은 할 수 있을 것 같습니다. 만약, 2차원 배열로 하시고 System.arraycopy를 사용하실꺼라면, 얕은복사,깊은복사를 찾아보시면 도움이 되실겁니다. 심승현 2018.8.14 18:35
  • 답변 감사합니다. 그리고 arraycopy안써도 값을 비교하려면 Arrays.equals(Num.array[i][j], temp); 이렇게 해도 댈까요? 알 수 없는 사용자 2018.8.14 18:50
  • 개인적인 생각으론 arraycopy는 없어도 될거같아요. Arrays.equals메소드를 사용하여 비교하시고 싶으시다면,( Num.array[i] ,temp) 로 하셔야 합니다. 이유는 설명 드리지 않겠습니다. 말나온김에 2차원 배열을 한번 찾아보시고 이유를 알아보시는것도 좋으실거 같습니다! 심승현 2018.8.14 19:04

1 답변

  • java8 부터는 stream 과 lambda 가 추가되어 있어서 편리하게 처리할 수 있습니다.

    public class Number {
        public List<Integer[]> numbersContainer = Stream.of(new Integer[]{2,7,19,25,29,36,16}, new Integer[]{2,5,12,31,33,42,32}).collect(Collectors.toList());
    }
    
    Integer[] temp = new Integer[]{1,2,3,4,5,6};
    
    Number number = new Number();
    
    List<List<Integer>> result = number.numbersContainer
                                        .stream()
                                        .map(arr -> Arrays.asList(arr)
                                                            .stream()
                                                            .filter(Arrays.asList(temp)::contains)
                                                            .collect(Collectors.toList()))
                                        .collect(Collectors.toList());
    
    
    [[2], [2, 5]]
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)