Random 클래스
무작위 숫자(난수)를 발생시키는데 활용할 수 있는 유용한 클래스이다.
java.util 패키지에 있으므로 이 패키지를 import 하여 사용한다.
Random 인스턴스를 생성하고 nextInt(int n) 메소드를 호출하면 0 부터 (n-1) 까지의 정수 중 무작위 정수(난수) 1개를 발생시킨다.
예제 코드
/*=========================
■■■ 배열 ■■■
- 배열과 난수 처리
=========================*/
// ※ Random 클래스 활용
// 사용자로부터 임의의 정수를 입력받아
// 그 정수의 갯수만큼 난수(1~100)를 발생시켜서 배열에 담아내고
// 배열에 담겨있는 데이터들 중
// 가장 큰 값과 가장 작은 값을 선택하여
// 결과를 출력하는 프로그램을 구현한다.
// 실행 예)
// 발생시킬 난수의 갯수 입력 : 6
// (53 17 69 45 10 55 → 무작위로 발생한 정수 형태의 난수들...)
// (int[] arr = {53, 17, 69 ,45 ,10 ,55}; → 배열에 담아내기)
// 가장 큰 값 : 69, 가장 작은 값 : 10
// 계속하려면 아무 키나 누르세요...
import java.util.Scanner;
import java.util.Random;
public class Test098
{
public static void main(String[] args)
{
// Scanner 인스턴스 생성
Scanner sc = new Scanner(System.in);
// 안내 메세지 출력
System.out.print("발생시킬 난수의 갯수 입력 : ");
int size = sc.nextInt();
// size 변수에 담아낸 수 만큼의 배열방 만들기
// (배열 선언 및 메모리 할당)
int[] arr = new int[size];
// Random 인스턴스 생성 (난수 발생용)
Random rd = new Random();
// 테스트 확인
//System.out.println("발생한 난수 : " + rd.nextInt(10));
// 0 ~ 9 까지의 무작위 정수 1개 발생~!!!
// 배열 구성(초기화) → 발생한 난수로 배열방에 값을 담아내기
for (int i=0; i<size; i++)
{
//arr[i] = ??????????;
arr[i] = rd.nextInt(100); //-- 0 ~ 99 무작위 정수 한 개 발생
arr[i] = rd.nextInt(100) + 1; //-- 1 ~ 100 무작위 정수 한 개 발생
}
// 테스트 확인
for (int i=0; i<arr.length; i++)
System.out.print(arr[i] + " ");
System.out.println();
//--==>> 발생시킬 난수의 갯수 입력 : 10
// 44 56 53 19 45 43 45 78 50 7
// 가장 큰 값, 가장 작은 값 확인
int max, min; //-- 최대값, 최소값
max = min = arr[0]; //-- max = min = 44;
for (int i=1; i<arr.length; i++)
{
if (max < arr[i])
max = arr[i]; //-- max = 94;
if (min > arr[i])
min = arr[i]; //-- min = 67;
}
// 최종 결과 출력
System.out.printf("가장 큰 값 : %d, 가장 작은 값 : %d\n", max ,min);
}
}
// 실행 결과
/*
발생시킬 난수의 갯수 입력 : 10
61 59 42 55 49 93 11 85 95 34
가장 큰 값 : 95, 가장 작은 값 : 11
계속하려면 아무 키나 누르십시오 . . .
*/
배열의 복사
* 배열 변수의 복사에는 데이터 복사, 주소값 복사 두 가지 형태가 존재한다.
- 주소값 복사 → 얕은 복사 → 원본을 수정하면 복사본에 영향을 미치게 되는 복사 방법.
(배열 뿐 아니라 모든 참조형 데이터에 해당)
- 데이터 복사 → 깊은 복사 → 실제 요소가 들어있는 값에 대한 복사로 원본을 수정해도 복사본에 영향을 미치지 않는 복사 방법. 원본과 복사본이 별개이다.
배열의 복사 예제 (주소값 복사, 얕은 복사)
/*=========================
■■■ 배열 ■■■
- 배열의 복사
=========================*/
// Test100.java 파일과 비교~!!! (데이터 복사, 깊은복사)
// 주소값 복사, 얕은복사
public class Test099
{
public static void main(String[] args)
{
int[] nums = {10, 20, 30, 40, 50}; //-- 배열의 원본
int[] copys; //-- 복사본으로 만들 배열
int temp; //-- 실습 진행(테스트)을 위한 임시 변수
// nums, copys는 참조타입, temp는 값 타입이라고 한다
// check~!!!
copys = nums; //-- 복사~!!!
temp = nums[0]; //-- temp = 10
nums[0] = 1000; //-- nums = {1000, 20, 30, 40, 50}
// copys 배열의 전체 요소 출력
for (int i=0; i<copys.length; i++)
System.out.print(copys[i] + " ");
System.out.println();
//--==>> 1000 20 30 40 50
System.out.println("temp : " + temp);
//--==>> temp : 10
}
}
배열의 복사 예제 (데이터 복사, 깊은 복사)
/*=========================
■■■ 배열 ■■■
- 배열의 복사
=========================*/
// Test099.java 파일과 비교~!!! (주소값 복사, 얕은복사)
// 데이터 복사, 깊은복사
//-- int형 배열에 대한 깊은 의미의 복사를 처리하는 메소드를 정의하는 형태로 실습을 진행한다.
public class Test100
{
public static void main(String[] args)
{
int[] nums = {10, 20, 30, 40, 50}; //-- 배열 원본
int[] copys1 = nums; //-- 얕은 의미의 배열 복사 수행
// (주소값 복사)
int[] copys2 = copyArray(nums); //-- 깊은 의미의 배열 복사 수행
// (사용자 정의 메소드 호출)
int[] copys3 = (int[])nums.clone(); //-- 깊은 의미의 배열 복사 수행
// (자바 제공 → clone() 메소드 호출)
// 원본 배열 요소의 수정~!!!
nums[1] = 2;
System.out.print("copys1 : ");
for (int i=0; i<copys1.length; i++)
System.out.print(copys1[i] + " ");
System.out.println();
//--==>> copys1 : 10 2 30 40 50
System.out.print("copys2 : ");
for (int i=0; i<copys2.length; i++)
System.out.print(copys2[i] + " ");
System.out.println();
//--==>> copys2 : 10 20 30 40 50
System.out.print("copys3 : ");
for (int i=0; i<copys3.length; i++)
System.out.print(copys3[i] + " ");
System.out.println();
//--==>> copys3 : 10 20 30 40 50
}
// 매개변수로 int 배열 타입을 넘겨받아 이를 복사한 후
// 복사한 배열을 결과 값으로 반환하는 기능을 가진 메소드 정의
public static int[] copyArray(int[] os) // {10, 20, 30, 40, 50}
{
// 매개 변수로 넘겨받은 배열(os, 원본 배열) 만큼의 배열방(메모리 공간, 길이)을 확보한 후
// 그 크기만큼 복사할 배열방 생성
int[] result = new int[os.length]; // int[] result = new int[5];
// 원본 배열(os)에 담겨있는 각각의 요소들을 복사 배열(result)에 담아내기
for (int i=0; i<os.length; i++) // for (int i=0; i<result.length; i++)
{
result[i] = os[i];
}
// 복사한 배열(result) 반환
return result;
}
}
당장의 배열 학습은 이것으로 마치고 컬렉션을 배우기 전까지 배열을 꾸준히 활용하도록 한다.
'자바 풀스택 과정 수업 정리 > 자바' 카테고리의 다른 글
자바 12-2 (2020.08.19) : 클래스 변수, 클래스 메소드, 인스턴스 변수, 인스턴스 메소드 (0) | 2020.08.24 |
---|---|
자바 12-1 (2020.08.19) : 접근제어 지시자, 정보은닉, 캡슐화 (0) | 2020.08.23 |
자바 11-1 (2020.08.18) : 배열의 배열(2차원 배열), 연습용 예제 (0) | 2020.08.23 |
자바 10-2 (2020.08.14) : 배열 개요, 배열 기초 (0) | 2020.08.22 |
자바 10-1 (2020.08.14) : 생성자, this 키워드, 초기화블럭 (0) | 2020.08.22 |
최근댓글