1년을 일, 시간, 분, 초로 출력하시오. 출력 할 것 -> 1년은 365일 x시간 x분 x초 입니다.
정답
package kr.or.ddit.homework;
public class HomeWork1 {
public static void main(String[] args) {
// 1년은 365.2422 일이다.
// 출력 할 것 -> 1년은 365일 x시간 x분 x초 입니다.
double day = 365.2422;
int days = (int)day; // 365일
day = day - days;
int hour = (int)(day*24); // 5시간
day = day*24 - hour;
int minute = (int)(day*60); // 48분
day = day*60 - minute;
int second = (int)(day*60); // 46초
System.out.println("1년은 " + days + "일 " + hour + "시간 " + minute + "분 " + second + "초 입니다.");
}
}
package kr.or.ddit.study02.sec02;
public class IntergerExample {
public static void main(String[] args) {
IntergerExample obj = new IntergerExample();
obj.intExample();
}
public void byteExample() {
/*
* byte : 1byte (127 ~ -128)
* (8bit 2^8)
*/
byte b1 = 127;
System.out.println("b1 = " + b1);
// byte b2 = 128; // 컴파일 에러
// b1 = b1 + 1; // 자바는 기본적으로 int type으로
// byte < int 크기가 차이 나기 때문에 담을 수 없다.
}
}
- short 타입
: 2byte (32767 ~ -32768)
16bit (2^16)
package kr.or.ddit.study02.sec02;
public class IntergerExample {
public static void main(String[] args) {
IntergerExample obj = new IntergerExample();
obj.shortExample();
}
public void shortExample() {
/*
* short : 2byte(32767 ~ -32768)
* (16bit 2^16)
*/
short s1 = 100;
System.out.println("s1 = " + s1);
short s2 = (short)(s1 + 100); // short를 사용하기 위해서 앞에 (short)를 기입하여 코딩해야함.
System.out.println("s2 = " + s2);
}
}
- int 타입
: 기본 정수형
4byte
32bit (2^32)
package kr.or.ddit.study02.sec02;
public class IntergerExample {
public static void main(String[] args) {
IntergerExample obj = new IntergerExample();
obj.intExample();
}
public void intExample() {
/*
* int : 4byte(32bit 2^32)
* 기본 정수형
*/
int i1 = 100;
System.out.println("i1 = " + i1);
int i2 = i1 + 100;
System.out.println("i2 = " + i2);
}
}
- long 타입
: 8byte
64bit (2^64)
int 범위를 넘어가지 않는 값일때는 데이터 끝에 L(l)을 추가한다.
package kr.or.ddit.study02.sec02;
public class IntergerExample {
public static void main(String[] args) {
IntergerExample obj = new IntergerExample();
obj.longExample();
}
public void longExample() {
/*
* long : 8byte(64bit 2^64)
* 테이터 끝에 L(l) 을 추가
*/
// long l1 = 1000000000000L;
long l1 = 1000000000000l;
System.out.println("l1 = " + l1);
long l2 = 10000; // int 범위를 넘어가지 않으면 뒤에 L(l)을 추가하지 않아도 됨.
// System.out.println("l1 = " + l1);
}
}
- 리터럴(literal)
소스 코드에서는 2진수, 8진수, 10진수, 16진수로 나타낼 수 있다.
1. 2진수의 경우 앞에 0b 또는 0B로 시작한다.
int num1 = 0b1011; // 10진수로 11
int num2 = 0B10100; // 10진수로 20
2. 8진수의 경우 앞에 0을 기입한다.
int num = 013; // 10진수로 11
3. 16진수의 경우 0x 또는 0X로 시작하며 숫자와 A, B, C, D, E, F 또는 a, b, c, d, e, f로 구성된다.
int num1 = 0xB3; // 10진수로 179
int num2 = 0X2A0F; // 10진수로 10767
문자 타입
- char 타입
: 하나의 문자를 저장할 수 있는 타입
부호 없는 2byte 정수 (0 ~ 65535)
문자의 경우 작은 따옴표(' ')로 감싸야 하며 숫자의 경우 유니코드로 변환되어 저장된다.
package kr.or.ddit.study02.sec02;
public class CharExzmple {
public static void main(String[] args) {
// char : 부호 없는 2byte 정수 (0 ~ 65535)
// '' 작은 따옴표로 감싸며 한문자 표현 가능.
char c1 = 'A';
System.out.println("c1 = " + c1);
char c2 = 97; // a의 아스키 코드
System.out.println("c2 = " + c2);
char c3 = (char)(c2 - 32); // char + int 형을 더하기 때문에 바꿔줘야 함. char의 바이트가 int보다 작기 때문.
System.out.println("c3 = " + c3);
int i4 = 44032;
char c4 = (char)i4;
System.out.println("c4 = " + c4);
}
}
결과 화면
문자열 타입
- String 타입
: 복수 개의 글자로 구성된 타입으로 데이터 타입이 아니다.
큰 따옴표(" ")로 묶어 선언한다.
package kr.or.ddit.study02.sec02;
public class StringExample {
public static void main(String[] args) {
/*
* 문자와 문자열
*
* 문자(char) : 한글자 데이터로 ' '로 묶어 선언
* 문자열(string) : 복수개의 글자로 구성된 자료(데이터 타입은 아님)
* " "로 묶어 선언
*/
String name1 = "강감찬";
String name2 = "홍길동";
System.out.println(name1 + "\t" + name2);
String result3 = 10 + 3 + ""; // 더한 후 문자열 추가 13
String result4 = "" + 10 + 3; // 처음부터 문자열로 취급 103
System.out.println(result3);
System.out.println(result4);
}
}
결과 화면
실수 타입
- float 타입
: 4byte (1.4e-45 ~ 3.4e+38)
부호 1bit, 지수 8bit, 가수 23bit
변수 선언 후 변수 초기화 시 값의 마지막에 f(F)를 기입해야 한다.
- double 타입
: 8byte (4.94e-324 ~ 1.8e+308)
부호 1bit, 지수 11bit, 가수 52bit
자바에서는 double 타입이 기본형이다.
package kr.or.ddit.study02.sec02;
public class FloatExample {
public static void main(String[] args) {
FloatExample obj = new FloatExample();
/*
* 1. float : 4byte ( 부호 1bit 지수 8bit, 가수 23bit
* 1.4e-45 ~ 3.4e+38)
* 2. double : 8byte ( 부호 1bit 지수 11bit, 가수 52bit
* 4.94e-324 ~ 1.8e+308)
*
* 둘 다 정확한 값이 나오지 않아 하단의 코드 작성 시 다른 값으로 결과가 나온다.
* double의 경우 더 정확한 값을 나온다.
*/
float f1 = 3.141592f;
double d1 = 3.141592;
if(f1 == d1) {
System.out.println("같은 값.");
} else {
System.out.println("다른 값.");
}
}
}
결과 화면
논리 타입
: 참과 거짓을 저장하는 타입.
- boolean 타입
package kr.or.ddit.study02.sec02;
public class BooleanExample {
public static void main(String[] args) {
// 논리형 true/false
// 1byte 조건문과 제어문의 실행 흐름을 변경하는데 사용.
boolean flag = false;
System.out.println("flag = " + flag);
flag = (1<2);
System.out.println("flag = " + flag);
}
}
결과 화면
막간의 TIP
제어문자
: 인쇄 할 수 없거나 키보드로 표현할 수 없는 특별한 문자.
역슬레시(\)와 한 개의 문자와 결합하여 작성한다.
- 자주 사용하는 제어 문자
이스케이프 문자
출력 용도
\n
개행 줄바꿈, 스크린 커서 위치를 다음 줄의 처음으로 옮김. (= enter)
\t
수평탭, 스크린 커서를 다음 탭으로 옮김.
\r
캐리지 리턴, 스크린 커서의 위치를 현재줄의 처음으로 옮김. 개행하지 않는다. 이 기호 다음에 오는 문자를 덮어 씌운다.