* java.util 패키지
-java.util 패키지는 자바 프로그램 개발에 보조 역할을 하는 클래스들을 담고 있다. 주로 컬렉션 관련 클래스들을 담고 있다.
-java.util 패키지 주요 클래스
1. Arrays : 배열을 조작할 때 사용.
2. Date : 날짜와 시간 정보를 저장하는 클래스
3. Calender : 운영체제의 날짜와 시간을 얻을 때 사용
4. Random : 난수를 얻을 때 사용
*Arrays 클래스
-Arrays 클래스는 배열 조작 기능을 가지고 있다. 배열 조작이란 배열의 복사, 항목 정렬, 항목검색과 같은 기능을 말한다.
-Arrays 클래스의 모든 메서드는 정적 메서드이므로 클래스이름으로 바로 사용이 가능하다.
-Arrays 클래스 주요 메서드
1. binarySearch(배열, 찾는값) : 전체 배열 항목에서 찾는 값이 있는 인덱스를 리턴.
2. copyOf(원본배열, 복사할 길이) : 원본 배열의 0번 인덱스부터 복사할 길이만큼의 인덱스까지 복사한 배열을 리턴
3. copyOfRange(원본배열, 시작인덱스, 끝인덱스) : 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴, 시작 인덱스는 포함되지만 끝 인덱스는 포함되지 않음.
4. sort(배열) : 배열의 전체 항목을 오름차순으로 정렬
5. toString(배열) : 배열의 값들을 *[값1, 값2...]*와 같은 문자열 형식으로 리턴.
- 단순히 배열을 복사할 목적이라면 System클래스의 arraycopy()메서드를 이용할 수도 있다.
ex) System.arraycopy(원본 배열, 원본시작인덱스, 복사할 타겟배열, 복사할 타겟배열 시작인덱스, 복사할 길이)
ArrayCopy
package api.util.arrays;
import java.util.Arrays;
public class ArrayCopy {
public static void main(String[] args) {
char[] arr1 = {'J', 'A', 'V', 'A'};
//Char[] arr2 = arr1; 이렇게 할 경우 동일한문자를 하나더 만드는것이 아니라
/arr1이랑 arr2가 동일한 배열을 같이 가르키고 있는거다.
//복사를 통해 동일한 배열을 하나더 만들려면 아래의 방법으로 해야된다. 하나하나 복사해야됨.
/*char[] arr2 = new char[4];
arr2[0] = arr1[0];
arr2[1] = arr1[1];
arr2[2] = arr1[2];
arr2[3] = arr1[3];
arr1[0] = 'B';*/
char[] arr2 = Arrays.copyOf(arr1, arr1.length);
// arr2[2] = 'Z';
System.out.println(Arrays.toString(arr1)); //J, A, V, A
System.out.println(Arrays.toString(arr2)); //J, A, Z, A
그럼위에 배열하나하나 복사할필요없이 이 방법을 이용하면 된다.
char[] arr3 = Arrays.copyOfRange(arr1, 1, 3);
System.out.println(Arrays.toString(arr3)); // A, V
int[] arr4 = {10, 20, 30, 40, 50, 60, 70, 80};
int[] arr5 = Arrays.copyOfRange(arr4, 1, 6);
System.out.println(Arrays.toString(arr5)); //20, 30, 40, 50, 60
}
}
ArraySearch
package api.util.arrays;
import java.util.Arrays;
public class ArraySearch {
public static void main(String[] args) {
int[] scores = {75, 47, 23, 56, 89};
int[] scores2 = Arrays.copyOf(scores, scores.length);
//배열의 데이터를 오름차순으로 정렬하는 메서드 sort()
Arrays.sort(scores2);
System.out.println(Arrays.toString(scores)); // 75, 47, 23, 56, 89
System.out.println(Arrays.toString(scores2)); // 23, 47, 56, 75, 89
//배열 내부데이터의 인덱스번호를 탐색하는 메서드 binarySearch()
int index = Arrays.binarySearch(scores2, 75); //위치
System.out.println("75가 저장된 인덱스: " + index); //75가 저장된 인덱스: 3
//배열 비교 equals(배열1, 배열2)
int[] arr1 = {1,3,5,7,9};
int[] arr2 = {1,3,5,7,9};
//배열도 String처럼 =으로 비교하면 안되고 equals을 사용해야한다.
if(Arrays.equals(arr1, arr2)) {
System.out.println("배열의 각 항목이 일치함.");
}else {
System.out.println("배열의 각 항목이 일치하지 않음.");
}
}
}
* Date 클래스
- Date클래스는 날짜를 표현하는 클래스다. 객체 간에 날짜 정보를 주고받을 때 주로 사용한다.
-Date 객체를 기본생성자로 생성하면 컴퓨터의 현재 날짜를 읽어 객체로 만든다.
-Date 클래스의 toString()메서드는 영문으로 된 날짜를 문자열로 리턴하는데 만약 특정 문자열 포맷으로 얻고 싶다면 java.text패키지의 SimpleDateFormat클래스를 이용하면 된다.
* SimpleDateFormat
-SimpleDateFormat클래스는 날짜를 원하는 형식으로 표현하기 위한 클래스이다. java.text패키지에 구성되어 있는 API이다.
- 패턴을 사용하여 생성자의 매개값으로 표현형식을 지정하여 객체를 생성한 후 format() 메서드를 호출하여 패턴이 적용된 문자열을 얻을 수 있다.
package api.util.date;
import java.util.Date;
//날짜의 표현형식을 바꿔주는 라이브러리입니다.
import java.text.SimpleDateFormat; //SimpleDateFormat은 java.util.Date와 같이 써야한다.
public class DateExample {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date); // Mon Feb 11 10:47:25 KST 2021
SimpleDateFormat sdf
= new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
System.out.println(sdf.format(date));// 2021년 02월 11일 10시 47분 25초
sdf = new SimpleDateFormat("yy-MM-dd a hh:mm:ss");
System.out.println(sdf.format(date)); //21-02-11 오전 10:50:23
sdf = new SimpleDateFormat("오늘은 E요일입니다. 오늘은 1년 중 D번째 날입니다.");
System.out.println(sdf.format(date)); // 오늘은 월요일입니다. 오늘은 1년중 42번째 날입니다.
}
}
만약 SimpleDateFormat을 자세히 알고 싶다면 java api 에서 확인할 수 있다.
* Calender 클래스
- Calender 클래스는 달력을 표현한 클래스이다. 이 클래스는 추상클래스이므로 객체를 생성할 수 없습니다.
- 클래스의 정적메서드인 getlnstence()메서드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로 한 Calender 하위 객체를 얻을 수 있다.
- Calender 객체를 얻었으면 get()메서드로 날짜와 시간에 대한 정보를 읽을 수 있다.
package api.util.calendar;
import java.util.Calendar;
public class CalendarExample {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int week = cal.get(Calendar.DAY_OF_WEEK);
// System.out.println(week);
String strWeek = null;
switch(week) {
case Calendar.MONDAY:
strWeek = "월";
break;
case Calendar.TUESDAY:
strWeek = "화";
break;
case Calendar.WEDNESDAY:
strWeek = "수";
break;
case Calendar.THURSDAY:
strWeek = "목";
break;
case Calendar.FRIDAY:
strWeek = "금";
break;
case Calendar.SATURDAY:
strWeek = "토";
break;
default:
strWeek = "일";
}
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
System.out.println("오늘은 " + year
+ "년 " + month + "월 "
+ day + "일입니다.");
System.out.println(hour + "시 "
+ minute + "분 "
+ second + "초 "
+ strWeek + "요일");
}
}
*Random 클래스
- Random 클래스는 난수를 얻어내기 위한 다양한 메서드를 제공하며 Math클래스의 random()메서드보다 다양한 난수값을 얻을 수 있게 하준다.
- Random 클래스 주요 메서드
1. nextBoolean() : boolean 타입의 난수를 리턴(true or false)
2. nextDouble() : double 타입의 난수를 리턴(0.0 <= ~ < 1.0)
3. nextInt() : int타입 난수를 리턴 (int의 범위)
4.nextInt(int n) : int 타입 난수를 리턴(0 <= ~ < n)
package api.util.random;
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
Random r = new Random();
//0.0이상 1.0미만의 실수 난수를 리턴.
double d = r.nextDouble();
System.out.println("실수 랜덤값: " + d);
//논리 랜덤값을 리턴하는 nextBoolean()
boolean b = r.nextBoolean();
System.out.println("논리 랜덤값: " + b);
//정수 랜덤값을 리턴하는 nextInt()
//정수 int가 저장할 수 있는 모든 범위에서 난수를 발생.
int i = r.nextInt();
System.out.println("정수 랜덤값: " + i);
//정수 0이상 10미만의 난수를 발생.
i = r.nextInt(10);
System.out.println("정수(0~9): " + i);
i = r.nextInt(10) + 1;
System.out.println("정수(1~10): " + i);
}
}
-------결과-------
실수 랜덤값: 0.09680311251165641
논리 랜덤값: true
정수 랜덤값: -680218042
정수(0~9): 9
정수(1~10): 7
랜덤클래스를 이용하여 로또 소스 짜보기.
package api.util.random;
import java.util.Arrays;
import java.util.Random;
public class Lotto {
public static int[] createLotto() {
int[] lotto = new int[6];
Random r = new Random();
int i = 0;
boolean check = false;
while(true) {
int rn = r.nextInt(45) + 1;
for(int j=0; j<=i; j++) { //중복 체크
if(rn == lotto[j]) {
check = false;
break;
}
check = true;
}
if (check) { // 중복이 안될을 경우
lotto[i] = rn;
i++;
}
if (i == 6) break;
}
Arrays.sort(lotto);
return lotto;
}
public static void main(String[] args) {
/* <로또 번호 출력하기>
* 1. 로또 번호 6개를 담을 배열을 생성하세요.
* 2. 정수 1~45 범위의 난수를 6개 발생시켜 배열에 담으세요.
* 3. Arrays.sort(배열이름) 메서드를 사용하여
* 배열을 오름차순으로 정돈하세요.
*/
int[] win = createLotto();
int[] my_lotto = createLotto();
System.out.println(Arrays.toString(win));
System.out.println(Arrays.toString(my_lotto));
int cnt = 0;
for (int i : my_lotto) {
for (int j : win) {
if(i == j) {
cnt += 1;
}
}
}
if(cnt == 6) {
System.out.println("1등!!");
}else if(cnt == 5) {
System.out.println("3등!!");
}else if(cnt == 4) {
System.out.println("4등!!");
}else if(cnt == 3) {
System.out.println("5등!!");
}else if(cnt == 2) {
System.out.println("숫자가 2개 일치함!");
}else {
System.out.println("꽝!!!");
}
}
}
'IT' 카테고리의 다른 글
16-1. 자바 예외처리 - try ~ catch (1) | 2022.10.06 |
---|---|
19. 자바 - List 컬렉션 기초 (1) | 2022.10.05 |
17-1. 자바 -예외처리 long 패키지 (1) | 2022.10.04 |
14. 자바 - 다형성 (0) | 2022.09.28 |
프린터 오프라인 상태로 인쇄 안될 때 해결 방법 (0) | 2022.09.28 |