두개의 다른 배열을 합친뒤에 새로만들어진 배열에서 최솟값을 찾으려면 어떡해야할까요?
조회수 949회
어저께도 질문했었는데 다른 걸로....서로다른 두 클래스가 있는데요 (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)));
-
(•́ ✖ •̀)
알 수 없는 사용자
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 } }
-
메인 함수에서 만드신 arr1과 arr2는 int[]형이 아니라 ArrayUtils 클래스의 객체들입니다. 반면 mergedArray는 클래스가 아니라 int[]형이구요. 그렇기 때문에 mergedArray는 ArrayUtils에 선언하신 메소드를 쓸 수 없습니다. 따라서 mergedArray도 클래스로 만드셔야합니다. 그러기 위해선 mergeArrays 메소드의 반환형을 int[]형이 아닌 ArrayUtils 형이 되야겠죠?
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력