java.util 패키지를 알아보자.
시간과 날짜 클래스
date
- 자바 초창기
- 단순히 시간과 날짜를 사용 할 때
calender
- 최근에 나온 보완되어 나온 클래스
- 그 외 시간과 날짜를 이야기 할 때
- 주로 많이 쓴다.
참고로 Java API에서 Deprecated 가 나온다면 될 수 있으면 쓰지말라는 뜻이다.
date클래스는 오래되었고 date클래스를 대체할 새로운 기능이 많이 나왔기 때문에
문서를 읽다보면 Deprecated 가 많이 나오는 것을 볼 수 있다.
package prjUtil;
import java.util.Calendar;
import java.util.Date;
public class DateCalenderTest {
public static void main(String[] args) {
//Date();는 하나만이 아니라 여러개를 만들 수 있어서 불편하다.
Date date = new Date();
//new Date() 현재 시간을 보여줘라
//인스턴스생성인데 어떻게 날짜와 시간을 보여줄까?
//.toString이 생략되어있다.
System.out.println(new Date());
//java에 있는 모든 객체는 object 객체에 소속된 .toString이 달려있다.
//.toString은 현재 객체에 있는 값을 문자열로 만들어준다.
System.out.println(new Date().toString());
//원래 값은 무엇이 나올까
DateCalenderTest test = new DateCalenderTest();
System.out.println(test.toString());
//현지 시간설정에 맞게 설정할 수 있는 메서드
System.out.println(new Date().toLocaleString());
//Calender는 .getInstance() 메서드를 만들어야지만 사용가능하다.
//내가 원하는 날짜와 시간 형식을 만들 수 있다.
//싱글턴 패턴이기 때문에 절대로 두개 이상의 인스턴스를 만들지 않는다.
Calendar cal = Calendar.getInstance();
System.out.println(" 현재 날짜와 시간은 " +
cal.get(Calendar.YEAR)+" 년 "+
(cal.get(Calendar.MONTH)+1)+" 월 "+
cal.get(Calendar.DATE)+" 일 "+
cal.get(Calendar.HOUR)+" 시입니다. ");
}
@Override
public String toString() {
return "내가 임의로 만든 문자열";
}
}
※ 결과값
Thu Oct 26 16:44:00 KST 2017
Thu Oct 26 16:44:00 KST 2017
내가 임의로 만든 문자열
2017. 10. 26 오후 4:44:00
현재 날짜와 시간은 2017 년 10 월 26 일 4 시입니다.
언어는 운영체제가 가지고 있는 기능을 끌어다 쓸 수 있도록 하는 것임을 유념하자.
Random 클래스를 써보자
package prjUtil;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
// TODO 난수 처리
Random r = new Random();
//System.out.println("임의의 수 : " + r.nextInt());
//System.out.println("임의의 수 : " + r.nextInt(5));
//System.out.println("임의의 수 : " + (r.nextInt(5)+1));
//내가 원하는 범위를 잡을 때 공식 = (최대값-최소값+1)+최소값
System.out.println(r.nextInt((5-1+1)+1));
//51~72사이의 임의의 값
System.out.println(r.nextInt((71-52+1)+52));
//7~13
System.out.println(r.nextInt((7-13+1)+7));
for(int i=0; i<5; i++) {
System.out.println(r.nextInt(71-52+1)+52);
}
}
}
/*
* 1. 가위 바위 보 게임 만들어보기
* 가위 : 1, 바위 : 2, 보 : 3
* 입력 : 3
* 결과 : 승리(또는 패배) 2전 3승
*
* 2. 로또 추출기
* - 로또 추출기로 로또 사보기
*
*/
StringTokenizer 메서드를 알아보자.
문자열 단위로 분리해주는 클래스
StringTokenizer() 클래스 : 복잡한 문자열 구분 처리
split() 메서드 : 간단한 문자열 구분 처리
.trim()은 좌우의 공백을 없애주는 String클래스의 메소드이다.
StringTokenizer() 클래스는 열거형(Enumeration)인스턴스를 만들어준다.
열거형(Enumeration)이란?
index로 접근할 수 없다.
데이터를 다루기 쉽게 순서대로 접근 한 것이다.
순서대로 줄을 세워놓고 순서대로 꺼낸다.
순서대로 처리할 때는 배열보다 빠르다.
Enum이라고 줄여서 이야기한다.
package prjUtil;
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
// TODO StringTokenizer() 클래스 : 복잡한 처리, split() 메서드 : 간단한 처리
//split()으로 문자열을 단순하게 구분해본다.
String data = "홍길동, 임꺽정, 신돌석, 강감찬";
//복잡하게 되어있는 문자열을 StringTokenizer()로 구분한다.
String data2 = "홍길동+ 임꺽정* 신돌석? 권율~강감찬";
//split 배열로 구분하기
//하나의 문자열을 콤마을 기준으로 스플릿이라는 메서드를 통해 4개의 문자열로 구분하겠다.
String[] names = data.split(",");
for(int i=0; i<names.length; i++) {
//.trim()은 좌우의 공백을 없애주는 String클래스의 메소드이다.
System.out.println(names[i].trim());
}
/*
//기본생성자가 없어서 빨간줄이 나온다.
//API문서를 찾아보면 사용하는 방법이 나온다. 2번째 방법을 쓴다.
//StringTokenizer에서 생성되는 인스턴스는 열거형이다.
StringTokenizer token = new StringTokenizer(data, ",");
//token. 분리된 토큰의 개수를 알려준다.
System.out.println(token.countTokens());
*/
//구분자가 한가지가 아니더라도 여러개의 구분자를 지정할 수 있다.
StringTokenizer token = new StringTokenizer(data2, "+*?~");
//token. 분리된 토큰의 개수를 알려준다.
System.out.println(token.countTokens());
/*
//순서대로 데이터를 써내올 수 있다.
System.out.println(token.nextToken());
System.out.println(token.nextToken());
System.out.println(token.nextToken());
System.out.println(token.nextToken());
*/
//.hasMoreTokens() 계속 데이터를 꺼내주다가 없으면 끝난다.
while(token.hasMoreTokens()) {
System.out.println(token.nextToken().trim());
}
String data3 = "JavaTM 언어사양 제2판:James Gosling,"
+ "Bill Join, Gilad Brach:무라카미 마사키:"
+ "피어슨 에듀케이션:2000:5500";
}
}
crrentTimeMillis 메서드
시간차이 구하기 : System.crrentTimeMillis
CurrentTime는 System class에 있는 메소드이다.(java.lang 패키지에 있다.)
시간을 1000/1까지 측정할 수 있다.
System 클래스에 있는 nanoTime() 메서드는 1000/1보다 더 정말 한시간 측정이 가능하다.
package prjUtil;
public class CurrentTimeTest {
public static void main(String[] args) throws InterruptedException {
// TODO 시간차이 구하기 : System.crrentTimeMillis
//CurrentTime는 System class에 있는 메소드이다.(java.lang 패키지에 있다.)
//시간을 1000/1까지 측정할 수 있다.
//System 클래스에 있는 nanoTime() 메서드는 1000/1보다 더 정말 한시간 측정이 가능하다.
long start = System.currentTimeMillis();
int sum = 0;
for(int i=0; i<1000000000; i++) {
sum = sum + i;
}
//이 시점에서 2초동안 멈추겠다.
//걸린시간이 2초 + 처리한 시간이 나온다.
Thread.sleep(2000);
long end = System.currentTimeMillis();
//1000분의 1초가 나온다.
System.out.println("걸린시간:" + (end-start));
//초단위까지만 보겠다. 이외의 정밀한 시간이 날라간다.
System.out.println("걸린시간:" + ((end-start)/1000));
}
}
※ 결과값
걸린시간:2380
걸린시간:2
DecimalFormat class 정리
숫자의 모양 형식을 원하는 모양으로 꾸며준다.
Wrapper 클래스
비객체와 객체는 캐스팅을 할 수 없다.
비객체와 객체가 서로 캐스팅이 필요할 때는 어떻게 해야할까?
이때는 java.lang의 Wrapper 클래스의 도움을 받는다.
모든 wrapper class는 java.lang 패키지에 있다.
Wrapper 클래스는 객체가 아닌 비객체로 객체로 포장해서 객체처럼 쓸 수 있게 해준다.
Java에서 유일하게 객체가 아닌 비객체는 기본 Data Type 8개 밖에 없다.
각 데이터타입별 Wrapper클래스에 있다. Wrapper클래스는 비객체 데이터타입을 객체로 만들어준다.
Wrapper클래스의 이름은 각 데이터 타입에서 따왔다. 첫 글자는 무조건 대문자이다.
예)Double, Inteser ...
Wrapper클래스의 자세한 설명은 아래를 참조하자.
package prjUtil;
import java.text.DecimalFormat;
public class DecimalFormatTest {
public static void main(String[] args) {
// TODO java.text.DecimalFormat
// 숫자의 모양 형식을 원하는 모양으로 꾸며준다.
double d1=2.523, d2=3.123;
double result = d1 +d2;
System.out.println(result);
DecimalFormat df = new DecimalFormat("#.####");
//.format 이라는 메서드가 result 값을 필터링
//모든 값을 String으로 돌려줌
String strResult = df.format(result);
System.out.println(strResult);
//여기서 계산을 하려면 어떻게 해야할까?
//그렇다면 실수형이 되야 하는데 String이라서 어렵다.
//비객체와 객체는 캐스팅을 할 수 없다.
//이때는 java.lang의 Wrapper 클래스의 도움을 받는다.
//pars 데이터타입 은 각 데이터타입별 Wrapper클래스에 있다..
double d3 = Double.parseDouble(strResult);
System.out.println(d3+d2+d1);
}
}
★ 야구게임을 만들어보자! ★
package prjUtil;
import java.util.Random;
import java.util.Scanner;
/*
* 규칙
* 1. 임의의 숫자 3개 준비(컴퓨터)
* - 중복이 없어야 한다.
* - 단자리 숫자 (1~9)
* 2. 맞출 때 까지 게임진행
* ---------------------
*
* 과제
* 1. 모듈화
* 2. ball카운트 비교조건문을 반복문으로 바꿔라
* 3. 시도 횟수
* 4. 걸린 시간
* 5. 순위
* 6. 레벨조정 (숫자 하나씩 추가)
* 7. 점수
*
*/
public class BaseBallGame {
public static void main(String[] args) {
// TODO 숫자야구게임
//1.컴퓨터의 값 입력
int com[] = new int[3]; // 3자리 숫자 배열 클래스 인스턴스 생성
Random r = new Random(); // 랜덤으로 숫자 생성 클래스 인스턴스 생성
for(int i=0; i<com.length; i++) { //com 배열의 길이만큼 반복문을 돈다.
com[i] = r.nextInt(9)+1; //com 배열에서 1부터 9까지 랜덤숫자를 생성
if(i == 1) { //두번째 숫자가 저장되었을 떄 중복된다면 처음으로
if(com[i] == com[i-1]) { //현재입력된 숫자와 처음입력된 숫자를 비교한다.
i--; //현재 숫자와 처음 입력된 숫자가 같다면
} //i는 0으로 돌아가 다시 반복문을 돈다.
}
if(i == 2) { //세번째 숫자가 저장되었을 때
if(com[i] == com[i-1] || com[i] == com[i-2]) {
i--;
}//세번째 숫자와 첫번째 숫자, 두번째 숫자와 첫번째 숫자를 비교하여 중복된다면 다시.
}
}
System.out.println(com[0] + "," + com[1] + "," + com[2]);
// if문을 for문으로 할 수도 있습니다.
// if(i!=0) {
// for(int j=0; j<i; j++) {
// if(com[i]==com[j]) {
// i--;
// break;
// }
// }
// }
//
//}
//System.out.println(com[0] + "," + com[1] + "," + com[2]);
//2.유저의 값 입력
int user[] = new int[3]; // 유저 클래스 인스턴스 생성
Scanner scan = new Scanner(System.in); //스캐너를 입력해서 받음
int strike = 0, ball = 0; //스트라잌과 볼 변수 받음
int inputNum = 0; //
for(;;) { // 무한반복을 한다.
strike = 0; // 변수를 0으로 초기화 해준다.
ball = 0; // 변수를 0으로 초기화 해준다.
System.out.println("숫자 입력 :");
inputNum = scan.nextInt(); //입력받은 값을 user의 0번 방, 1번방, 2번 방에 따로 입력
//처음 3자를 숫자가 들어올 때 100단위, 10단위, 1단위를 나누어서 저장
user[0] = inputNum/100; // 100을 나누어 1째 자리 수 비교
user[1] = (inputNum%100)/10; // 100의 나머지에 10을 나누어 2번째 자리 수 가져감
user[2] = (inputNum%100)%10; // 100의 나머지와 10의 나머지인 1을 가져감
//System.out.println(user[0] + "," + user[1] + "," + user[2]);
for(int i=0; i<3; i++) {
if(com[i] == user[i]) { //위치에 값을 비교
//==은 문자열일 때만 주소를 비교하고, 숫자일 때는 숫자를 비교한다.
strike++;
}
}
// 컴퓨터가 생각한 숫자와 사용자가 생각한 숫자가
// 위치가 다르지만 같다면 ball이 한개 올라간다.
if(com[0]==user[1] || com[0]==user[2]) {
ball++;
}
if(com[1]==user[0] || com[1]==user[2]) {
ball++;
}
if(com[2]==user[0] || com[2]==user[1]) {
ball++;
}
if(strike == 3) {
System.out.println("축하합니다.");
break;
}
//아웃임과 동시에 입력한 숫자가 무엇인지 알 수 있도록 보여준다.
else if(strike==0 && ball==0){
System.out.println("아웃입니다." +
user[0] + "," + user[1] + "," + user[2]);
}
else {
System.out.println(strike+"스트라이크"+ball+
"볼 : " + user[0] + ","+ user[1] + "," + user[2]);
}
}
}
}
※ 결과값
'개발 > Java' 카테고리의 다른 글
[java] 제네릭 Generic (0) | 2017.10.28 |
---|---|
[java] 컬렉션 Collection (0) | 2017.10.28 |
[java] 인터페이스(InterFace) (0) | 2017.10.26 |
[java] 패키지 package (0) | 2017.10.25 |
[java] 클래스 (Class) part.3 : 상속 (Inheritance ) (0) | 2017.10.24 |