두개의 다른 배열을 합친뒤에 새로만들어진 배열에서 최솟값을 찾으려면 어떡해야할까요?


어저께도 질문했었는데 다른 걸로....서로다른 두 클래스가 있는데요 (ArrayUtils, ArrayUtilsTester). 첫번째 클래스는 메소드들을 적는 클래스고 두번째 클래스는 그 값들을 출력하는 클래스인데요. arr1 이라는 배열과 arr2라는 배열을 합쳐서 mergedArray 라는 새 배열을 만들어서 출력해내는데까지는 성공했는데 mergedArray배열에서 최솟값을 찾으려면 어떡해 해야할까요. 기존에 arr1 과 arr2 배열의 최솟값들을 찾을때 썻던 똑같은 메소드랑 방법은 안되더라구요 ㅠ... 각 배열들의 사이즈와 그 안의 정수들 모두 0 - 100 사이에 랜덤한 숫자들입니다.


    import java.util.Random;
    import java.util.stream.IntStream;

    public class ArrayUtils 
    {
        private int[] arr;
        ArrayUtilsTester aut = new ArrayUtilsTester();

        public ArrayUtils(int sizeOfArray)
        {
            arr = new int [sizeOfArray];
            Random random = new Random();

            for (sizeOfArray = 0; sizeOfArray < arr.length; sizeOfArray++)
            {
                    arr [sizeOfArray] = random.nextInt(101);
            }

        }

        public int[] getArr() 
        {
                return arr;
        }

        public void setArr(int[] arr) 
        {
                this.arr = arr;
        }

        public int findMin()  
        {
            int minValue = arr[0];

            for(int i=1;i < arr.length;i++)
            {
                    if(arr[i] < minValue)
                {
                        minValue = arr[i];
                }
            }
            return minValue;    
        }

        public int[] mergeArrays(int[] arr1, int[] arr2) 
        {
            int length = arr1.length+arr2.length;  
            int [] mergedArray = new int[length];

            for(int i=0; i < length; i++) 
            {
                if(i < arr1.length) 
                {
                    mergedArray[i] = arr1[i];   
                }
                else 
                {
                    mergedArray[i] = arr2[i - arr1.length];
                }
            }
            return mergedArray; 
        } 
     }

    import java.util.Arrays;
    import java.util.Random;

    public class ArrayUtilsTester
    {
        public static void main(String[] args)
        {
            Random random = new Random();
            int sizeOfArray = random.nextInt(101);

            ArrayUtils arr1 = new ArrayUtils(sizeOfArray);
            ArrayUtils arr2 = new ArrayUtils(sizeOfArray);
            int[] mergedArray = arr1.mergeArrays(arr1.getArr(), arr2.getArr());

        System.out.println("The randomly generated array arr1 is : " + (Arrays.toString(arr1.getArr())));
        System.out.println("Smallest integer in the arr1 is = "  + (arr1.findMin()))

        System.out.println("The randomly generated array arr2 is : " + (Arrays.toString(arr2.getArr())));
        System.out.println("Smallest integer in the arr1 is = "  + (arr2.findMin()));

        System.out.println("The merged array between arr1 and arr2 is  = " + (Arrays.toString(mergedArray)));
  • 2017년 11월 30일에 작성됨

조회수 82


2 답변


자바 8 이상이라면 아래와 같이 하실 수 있습니다.

import java.util.Arrays;
import java.util.stream.IntStream;

public class Main02 {
    public static void main(String[] args) {
        int[] arr01 = IntStream.of(4, 8, 6, 30).toArray();
        int[] arr02 = IntStream.rangeClosed(11, 20).toArray();

        IntStream.concat(Arrays.stream(arr01), Arrays.stream(arr02)).forEach(System.out::println);    // 머지한 배열 출력
        int min = IntStream.concat(Arrays.stream(arr01), Arrays.stream(arr02)).min().getAsInt();    //최소
        int max = IntStream.concat(Arrays.stream(arr01), Arrays.stream(arr02)).max().getAsInt(); // 최대

        System.out.println(min);    // 4
        System.out.println(max);    // 30
    }
}
  • 2017년 11월 30일에 작성됨


메인 함수에서 만드신 arr1과 arr2는 int[]형이 아니라 ArrayUtils 클래스의 객체들입니다. 반면 mergedArray는 클래스가 아니라 int[]형이구요. 그렇기 때문에 mergedArray는 ArrayUtils에 선언하신 메소드를 쓸 수 없습니다. 따라서 mergedArray도 클래스로 만드셔야합니다. 그러기 위해선 mergeArrays 메소드의 반환형을 int[]형이 아닌 ArrayUtils 형이 되야겠죠?

  • 2017년 11월 30일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close