Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

290570

24.05.08 본문

java_spring (2024.05 ~ 2024.10)

24.05.08

qordpsem 2024. 5. 8. 09:24

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