1. Random 클래스
- 지정된 범위 내에서 임의의 난수를 발생시키는 클래스.
- 생성자 Random()은 아래와 같이 종자값을 System.currentTimeMillis()로 하기 때문에 실행할 때마다 얻는 난수가 달라진다.
System.currentTimeMillis() : 현재 시간을 천분의 1초 단위로 변환해서 반환
public Random() {
this(System.currentTimeMillis()); // Random(long seed)를 호출한다.
}
Random클래스의 메서드는 다양하지만, 그중 자주 쓰이는 주요 메서드는 아래와 같다.
○ 주요메서드
int nextInt() : 임의의 정수값을 반환
int nextInt(int n) : 0~n까지 범위 내에 있는 임의의 정수 값을 반환(★중요★ n은 포함하지 않고 반환한다.)
double nextDouble() : 0.0~1.0사이의 임의의 실수값을 반환
- 활용 분야 : 게임, 확률 등에서 사용.
난수를 얻는 방법을 생각하면 Math.random()이 떠오를 것이다.
사실 Math.random()는 내부적으로 Random클래스의 인스턴스를 생성해서 사용하는 것이므로 둘 중에서 편한 것을 사용하면 됨
double randNum = Math.random(); double randNum = new Random().nextDouble(); //위 문장과 동일
예제) Random 클래스를 이용하여 로또 번호 고르기
package Util;
import java.util.Random;
public class Ex01 {
public static void main(String[] args) {
// 로또 번호를 만들어 보자.
Random random = new Random();
int num = 0;
// 중복이 있는 코드
System.out.println("중복이 있는 코드");
for(int i=1; i<=6; i++) {
num = random.nextInt(45) + 1;
System.out.printf("%d\t", num);
}
System.out.println();
//중복이 발생되지 않게 로또를 만들어보자
System.out.println("중복이 없는 코드");
int[] lotto = new int[6]; // 로또 배열 생성
for(int i=0; i<lotto.length; i++) {
lotto[i] = random.nextInt(45) + 1;
if(i>0) { // 두번째 시도부터 아래 반복문을 적용하겠다.
for(int j=0; j<i; j++) {
if(lotto[i] == lotto[j]) { //중복인 경우
lotto[i] = random.nextInt(45) + 1;
j = -1; // 이래야지만 계속 반복
}
}
} // if 문 종료
System.out.printf("%d\t", lotto[i]);
}
}
}
결과
중복이 있는 코드
35 7 24 3 24 35
중복이 없는 코드
35 27 3 13 23 34
로또 번호 생성 프로그램 코드는 코테에 자주 등장한다고 하니 잘 익혀두자
위 방법 말고도 풀 수 있는 코드가 많긴 하다
로또 번호 생성 방법 2)
package Util;
import java.util.Random;
public class LottoGenerator {
public static void main(String[] args) {
// 1 ~ 45사이의 숫자 6개를 무작위로 추출하여 출력(중복불가)
Random random = new Random();
// 배열 변수 선인 및 메모리 할당
int[] arrLotto = new int[6];
for (int i = 0; i < arrLotto.length ; i++){
arrLotto[i] = random.nextInt(45) + 1;
// 1~45사이의 정수를 랜덤하게 리턴
for (int j = 0; j < i ; j++ ){
if (arrLotto[j] == arrLotto[i]){
// 기존의 숫자와 동일한 값이 있으면
i--;
break; // 해당 반복문 탈출하여 다시 제일 바깥쪽 반복문으로 돌아감
}
}
}
// 출력
for (int i = 0 ; i < arrLotto.length ; i++ ){
System.out.print(arrLotto[i] + "\t");
}
}
}
결과
37 35 10 23 41 18
2. Math 클래스
- 수학과 관련된 메서드를 제공해 주는 클래스.
- 유일하게 java.lang 패키지에 있는 클래스임.
public class Ex02 {
public static void main(String[] args) {
// 1. max() : 최대값을 구해 주는 메소드 - 두 수를 비교
// min() : 최솟값을 구해주는 메소드 = 두 수를 비교
int num1 =78, num2 = 91;
System.out.println("최댓값 : " + Math.max(num1, num2));
System.out.println("최솟값 : " + Math.min(num1, num2));
// 2. round() : 반올림이 적용되는 메소드
System.out.println(123.566);
System.out.println("Math.round : " + Math.round(123.566));
// 3. abs() : 절대값을 구해주는 메소드
System.out.println("abs : " + Math.abs(-125.34));
// 4. ceil() : 무조건 올림을 해주는 메소드
System.out.println("ceil() : " + Math.ceil(12.123));
}
}
결과
최댓값 : 91
최솟값 : 78
123.566
Math.round : 124
abs : 125.34
ceil() : 13.0
3. Calendar 클래스
- 날짜 / 시간 관련 정보를 제공해 주는 클래스.
- 날짜 / 시간과 관련된 정보를 제공해 주는 클래스.
- Calendar 클래스는 추상클래스임.
- 추상클래스로 작성된 이유 : 날짜와 시간을 계산하는 방법이 지역, 문화, 나라마다 다르기 때문임.
- Calendar 클래스에는 날짜와 시간을 계산하는데 꼭 필요한 메서드나 상수로 구성이 되어 있음.
- 추상클래스이지만 getInstance() 메서드를 이용하여 시스템의 날짜와 시간 정보를 표현할 수 있음.
- getInstance() : 싱글턴 방식. 하나의 인스턴스만을 가지고 공유해서 사용할 때 쓰는 방식.
package Util;
import java.util.Calendar;
// Calendar 클래스
public class Ex03 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// 날짜와 관련된 정보를 확인하는 방법
int year = cal.get(Calendar.YEAR); // 현재 년도
int month = cal.get(Calendar.MONTH)+1; // 현재 월 (1월을 0으로 표시했기 때문에)
int day = cal.get(Calendar.DAY_OF_MONTH);
int week = cal.get(Calendar.WEEK_OF_YEAR);// 현재 일자
System.out.printf("현재 년도 : %d년\n", year);
System.out.printf("현재 월 : %d월\n", month);
System.out.printf("현재 일 : %d일\n", day);
System.out.printf("현재 주는 52주 중에 %d 주 입니다.\n", week);
// 시간과 관련된 정보를 확인하는 방법
// 1. 12시간 제를 이용하는 방법_오전(0), 오후(1)
// 형식) Calendar.AM_PM
int am_pm = cal.get(Calendar.AM_PM);
int hour = cal.get(Calendar.HOUR); // 몇 시
int minute = cal.get(Calendar.MINUTE); // 몇 분
int second = cal.get(Calendar.SECOND); // 몇 초
System.out.println("오전이면 0, 오후면 1 출력 : " + am_pm);
if(am_pm == 0) { // 오전인 경우
System.out.println("현재 시간은 AM(오전) "+hour+"시 "+
minute+"분 "+second+"초 입니다.");
}else {
System.out.println("현재 시간은 PM(오후) "+hour+"시 "+
minute+"분 "+second+"초 입니다.");
}
// 2. 24시간제를 이용하는 방법
// 형식) Calendar.HOUR_OF_DAY
int hours = cal.get(Calendar.HOUR_OF_DAY);
System.out.println("현재 시간은 "+hours+"시 "+minute+"분 "+
second+"초 입니다.");
}
}
결과
현재 년도 : 2021년
현재 월 : 9월
현재 일 : 6일
현재 주는 52주 중에 37 주 입니다.
오전이면 0, 오후면 1 출력 : 1
현재 시간은 PM(오후) 5시 43분 59초 입니다.
현재 시간은 17시 43분 59초 입니다.
4. Arrays 클래스
- 배열 객체를 처리해주는 클래스.
1) fill() : 배열의 요소를 특정한 값(데이터)으로 채우는 메서드.
2) equals(객체, 객체) : 두 객체의 내용(데이터)이 같은지 틀린지 비교하는 메서드.
==> return 값이 boolean형(true, false)
==> 객체의 방 마다 모든 데이터가 같아야만 true.
3) sort() : 배열의 원소(데이터)를 정렬(오름차순)하는 메서드.
package Util;
import java.util.Arrays;
// Arrays 클래스
public class Ex04 {
public static void main(String[] args) {
// 배열 생성
String[] str = {"홍길동", "이순신", "유관순"};
for(String k : str) {
System.out.println("str 배열 요소 : " + k);
}
System.out.println();
// 1. fill() : 배열의 요소를 특정한 값(데이터)으로 채우는 메소드
System.out.println("fill 메소드");
Arrays.fill(str, "김유신");
for(String k : str) {
System.out.println("str 배열 요소 : " + k );
}
System.out.println();
// 2. equals(객체, 객체)
// 두 객체의 내용(데이터)이 같은지 다른지 비교하는 메소드
String[] str2 = {"김유신", "김유신", "김유신"};
System.out.println("equals 메소드");
if(Arrays.equals(str, str)) {
System.out.println("두 객체의 내용(데이터)은 같습니다.");
}else {
System.out.println("두 객체의 내용(데이터)은 다릅니다.");
}
System.out.println();
// 3. sort() : 배열의 원소(데이터)를 정렬(오름차순)하는 메소드
System.out.println("sort 메소드");
int[] arr = {54, 67, 13, 97, 41};
for(int k : arr) {
System.out.printf("%d\t", k);
}
System.out.println();
Arrays.sort(arr); // 오름차순 정렬
for(int k : arr) {
System.out.printf("%d\t", k);
}
}
}
결과
str 배열 요소 : 홍길동
str 배열 요소 : 이순신
str 배열 요소 : 유관순
fill 메소드
str 배열 요소 : 김유신
str 배열 요소 : 김유신
str 배열 요소 : 김유신
equals 메소드
두 객체의 내용(데이터)은 같습니다.
sort 메소드
54 67 13 97 41 // 오름차순 하지 않은 상태
13 41 54 67 97 // 오름차순 한 상태=>sort 메서드 적용
5. ArrayList 클래스
set(int index, E element) 메서드는 ArrayList에 담긴 객체를 변경
package Util;
// 1. ArrayList 클래스를 사용하기 위해 import
import java.util.ArrayList;
public class arrayList {
public static void main(String[] args) {
// 2. String을 담을 수 있는 ArrayList 객체 생성
ArrayList<String> names = new ArrayList<String>();
// 3. 리스트에 이름을 추가하시오.
names.add("김");
names.add("이");
names.add("박");
names.add("최");
// 4. 반복문을 통해 모든 이름 출력하시오
// ArrayList는 size로 배열의 크기를 반환 받을 수 있다.
for(int i=0; i<names.size(); i++) {
System.out.printf("names.get(%d) : %s\n", i, names.get(i));
}
}
}
결과
names.get(0) : 김
names.get(1) : 이
names.get(2) : 박
names.get(3) : 최
그렇다면 arrayList는 파라미터로 String이나 int타입만 받을수 있는가?
객체도 담을 수 있다.
package Util;
//1. ArrayList 클래스를 사용하기 위해 import
import java.util.ArrayList;
public class ArrayList2 {
public static void main(String[] args) {
// 2. Book을 담을 수 있는 ArrayList 객체 생성
ArrayList<Book> bookList = new ArrayList<Book>();
// 3. 새로운 Book 객체 생성
Book book1 = new Book("자바의 정석", 23000);
Book book2 = new Book("수학의 정석", 21000);
Book book3 = new Book("영어의 정석", 19000);
// 4. ArrayList 객체에 Book 객체들을 담으시오
bookList.add(book1);
bookList.add(book2);
bookList.add(book3);
// 5. 반복문을 통해 모든 이름 출력하시오
// ArrayList는 size로 배열의 크기를 반환 받을 수 있다.
for(int i=0; i<bookList.size(); i++) {
System.out.printf("bookList.get(%d) : %s\n", i, bookList.get(i));
}
}
}
class Book {
// 필드
private String title;
private int price;
// 생성자
public Book(String title, int price) {
this.title = title;
this.price = price;
}
// 메서드
public String toString() {
return String.format("Book [ name %s, price : %,d원]", title, price);
}
}
결과
bookList.get(0) : Book [ name 자바의 정석, price : 23,000원]
bookList.get(1) : Book [ name 수학의 정석, price : 21,000원]
bookList.get(2) : Book [ name 영어의 정석, price : 19,000원]
'Back-End > Java' 카테고리의 다른 글
[Java] 메소드 호출 시 반환형 (0) | 2021.08.19 |
---|---|
[Java] String 클래스의 특징 및 주요 메서드(StringBuffer, StringTokenizer) (0) | 2021.08.19 |
[Java] 예외(Exception) 처리 (1) | 2021.08.18 |
[Java] final 지정자 (0) | 2021.08.18 |
[Java] 접근지정자(접근제어자) 권한 (0) | 2021.08.18 |
댓글