290570
24.05.08 본문
Java 수업 2일차
자료형(Data Type)
=> 프로그램 실행 중에 발생하는 데이터를 저장하기 위해서는 기억장소를 마련해야 하는데, 그것을 "변수를 선언한다"라고 한다. 변수를 선언할 때는 그 변수에 어떤 성격의 데이터를 저장할 것인지 정해줘야한다. 그것을 "자료형"이라고 한다.
1. 기본자료형 : 변수 자신이 값을 갖고있는 자료형
2. 참조자료형 : 변수 자신이 값을 갖고있는 것이 아니라, 값이 있는 메모리를 참조하는 자료형 (객체변수, 배열)
**String은 참조자료형에 해당되고, 기본자료형처럼 쓰기도 함
#기본자료형
1. 논리값을 저장하기 위한 자료형 => boolean
2. 문자를 저장하기 위한 자료형 => char
3. 정수를 저장하기 위한 자료형 => byte, short, int(*), long
4. 실수를 저장하기 위한 자료형 => float, double(*)
3-1. byte(8bit) : -2^7 ~ 2^7-1 (-128 ~ 127)
short(16bit) : -2^15 ~ 2^15-1
int(32bit) : -2^31 ~ 2^31-1
long(64bit) : -2^63 ~ 2^63-1
float (32bit) / double(64bit)
3-2. overflow / underflow (자료형 고려하지 않으면 일어나는 일)
class D11ByteTest{
public static void main(String[] args){
byte data;
data = 127;
System.out.println(data);
}
}
위의 코드에서
data = 128로 바꾸면 에러가 난다
#강제로 형 변환 시 overflow
class D11ByteTest{
public static void main(String[] args){
byte data;
data = 127;
data = (byte)(data+1); //형변환
System.out.println(data);
}
}
#자료형이 다른 것끼리 연산을 하면 그 결과는 그 중에 큰 자료형이 된다
2 (int) + 2.5 (double) => 4.5 (double)
5 (int) / 2 (int) => 2 (int)
5 (int) / 2.0 (double) => 2.5 (double)
class D17IntDouble {
public static void main(String[] args) {
double div;
div = 5/2;
System.out.println(div);
}
}
위 코드의 결과값은 아래와 같다
5 / 2 인데 2.5가 아닌 2.0이 나오는 이유는?
=> 정수 / 정수 라서 2가 나옴
(둘 중 하나만 double 형으로 바꿔도 됨)
5/ 2.0 또는 5/(double)2 로 수정하면 2.5 도출됨
#평균 나이 프로그래밍
//연습) 아빠나이, 엄마나이, 아들나이를 입력받아서 평균 나이를 구하여 출력
import java.util.Scanner;
public class Family {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int dad, mom, son, sum, average;
System.out.print("아빠 나이를 입력하세요 :");
dad = sc.nextInt();
System.out.print("엄마 나이를 입력하세요 :");
mom = sc.nextInt();
System.out.print("아들 나이를 입력하세요 :");
son = sc.nextInt();
sum = dad + mom + son;
average = sum / 3;
System.out.println("평균 나이는" +average+"세 입니다.");
}
}
#오류
#해결방법
다른 분의 도움으로 인코딩 오류라는 것을 알게 되었다.
UTF-8 로 인코딩을 해야 한글 표현이 가능하다.
#결과
//40세이상 무료 암검진
//이름과 출생연도 입력받아 나이 계산하여 무료 암검진 여부 판별
import java.util.Scanner;
import java.util.Date;
public class CancerTest {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Date today = new Date();
String name, result="무료검진 대상이 아닙니다";
int age, year, thisYear= today.getYear() + 1900;
System.out.print("이름을 입력하세요 ==>");
name = sc.next();
System.out.print("출생연도를 입력하세요 ==>");
year = sc.nextInt();
age = thisYear - year;
if (age >= 40) {
result = "무료암검진 대상자 입니다.";
}
System.out.println("*** 무료 암검진 판별 결과 ***");
System.out.println("이름 : "+name);
System.out.println("올해연도 :"+thisYear);
System.out.println("출생연도 :"+year);
System.out.println("나이 : "+age);
System.out.println("결과 : "+result);
}
}
Date에는 1900을 더해줘야 현재 연도가 나온다. 그동안 코틀린으로 짤때 LocalDateTime이나 ZonedDateTime 만 써봤는데 Date는 생소했다.
*boolean 사용하여 수정
//40세이상 무료 암검진
//이름과 출생연도 입력받아 나이 계산하여 무료 암검진 여부 판별
import java.util.Scanner;
import java.util.Date;
public class D04CancerTest {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Date today = new Date();
String name, result="무료검진 대상이 아닙니다";
int age, year, thisYear= today.getYear() + 1900;
System.out.print("이름을 입력하세요 ==>");
name = sc.next();
System.out.print("출생연도를 입력하세요 ==>");
year = sc.nextInt();
age = thisYear - year;
boolean flag = false;
flag = age >= 40;
if (flag) {
result = "무료암검진 대상자 입니다.";
}
System.out.println("*** 무료 암검진 판별 결과 ***");
System.out.println("이름 : "+name);
System.out.println("올해연도 :"+thisYear);
System.out.println("출생연도 :"+year);
System.out.println("나이 : "+age);
System.out.println("결과 : "+result);
}
}
#Loop 설정
class D06LoopTest {
public static void main(String[] args) {
boolean flag = true;
int n = 0;
while(flag){
System.out.println("메로나");
n = n+1;
if(n==7){
flag = false;
}
}
}
}
#결과 - 7개까지만 나오는걸 확인할 수 있음
#한글자 단어는 " " 가 아니라 ' ' 로 묶어야 함
class D07CharTest {
public static void main(String[] args) {
char like;
//like = 'x';
like = "x";
System.out.println(like);
}
}
#에러코드
'java_spring (2024.05 ~ 2024.10)' 카테고리의 다른 글
증감 연산자 (0) | 2024.05.08 |
---|---|
05.08 오류 (0) | 2024.05.08 |
05.07 과제 (0) | 2024.05.07 |
05.07 프로그래밍 모음 (0) | 2024.05.07 |
05.07 (0) | 2024.05.07 |