728x90

1.Ex01)

package days03;

import java.io.BufferedReader;
//컴파일러가 자동으로 추가해 준다.
//import java.lang.*;
/**
 * @author kim
 * @date 2023. 1. 30.-오전 9:49:48
 * @subject	[package와 import문 설명]
 * @content
 *
 */
public class Ex01 {

	public static void main(String[] args) {
		// [import 문 설명]
		/*
		 * 1.패키지(package)?
		 * 	ㄱ. 서로 관련있는 클래스의 묶음
		 * 	ㄴ. 실제 물리적으로는 폴더(디렉토리)이다.
		 *  ㄷ. 목적: 효율적으로 클래스를 관리하기 위해서
		 *  
		 * 	days01, days02, days03 패키지
		 *  이유? 수업1일차, 수업2일차, 3일차 클래스를 묶어 놓기 위해서
		 * 2.패키지 선언
		 * 	Ex01.java 소스파일(Source File)의 맨 위에 코딩한다.
		 *  package 패키지명[.서브패키지명.서브패키지명];
		 *  어떤 클래스는 반드시 패키지에 속해있다.
		 *  
		 * 3.다른 패키지 안의 클래스를 사용하려면?
		 *   days03.Ex01 - main(){
		 *   	days01.HelloWorld 클래스를 사용하려면
		 *   }
		 *   
		 *   패키지명[.서브패키지명].클래스명 으로 선언해서 사용해야 한다.
		 *   days01.HelloWorld hw;  //days01의 HelloWorld 클래스를 hw라는 변수로 사용하겠다.
		 *   
		 * 4.Full Name을 적으세요...
		 *   => 패키지명.서브패키지명.클래스명
		 *   
		 *  //BufferedReader
		 *  java.io.BufferedReader br;
		 *  f3를 BufferedReader을 클릭해서 선언문 확인해보기
		 *  
		 *  하지만, import java.io.BufferedReader; import 구문을 추가해준다면
		 *  패키명을 지정해주지 않아도 됨
		 *  따라서, BufferedReader br; 쓸 수 있다.
		 *  
		 * 5.Static이 붙어있는 import문
		 * 
		 */
		
		java.io.BufferedReader br1;
		BufferedReader br2;
		BufferedReader br3;
		BufferedReader br4;
		
		//[System 클래스]
		//1. 어떤 패키지 속한 클래스 확인? java.lang 패키지 안에 속한 클래스
		java.lang.System.out.println("홍길동");
		
		//import java.lang.System; 왜? 안 썼었어도 쓸 수 있었을까?
		//sol)import java.lang.*
		//	자바.랭.모든클래스는 컴파일러가 자동으로 추가해줘서 굳이 쓰지 않아도 되는 것 이다.
		

	}

}

 

2.Ex02)

package days03;

/**
 * @author kim
 * @date 2023. 1. 30.- 오후 12:48:38
 * @subject 음수 표현 방법 [음수 → 2진수 표현 방법]
 * @content 1. 부호와 절대치
 * 			2. 1의 보수법
 * 			3. 2의 보수법(현재) =  1의 보수 + 1
 *
 */
public class Ex02 {

	public static void main(String[] args) {
		// 'A' → 문자코드표 → 65		→0100 0001
		//-10 [음수]/양수				→[][][][] [][][][]
		/*
		 * 
		 * -10			[][][][] [][][][]
		 * 1)절대치		|-10| 절대값은 10인 양수
		 * [0]000 1010	 10	양수
		 * [1]000 1010	-10 음수
		 * 
		 * 0000 1010
		 * 2)1의 보수(보수는 0 → 1, 1 → 0으로 바꾼다는 것)
		 * 1111 0101
		 * 
		 * 3)1의 보수에 1더하기
		 * 1111 0101
		 * 0000 0001
		 * --------------
		 * 1111 0110
		 * 
		 * [문제] -36
		 * |-36|=36
		 * 1)0010 0100
		 * 
		 * 2)1101 1011
		 * 	
		 * 3)1101 1100
		 * 
		 */

	}

}

 

3.Ex03)

package days03;

/**
 * @author kim
 * @date 2023. 1. 30.-오후 2:16:02
 * @subject 실수 → 2진수 표현
 * @content 실수가 어떻게 2진수로 저장이 되어서 표현이 되는지
 *
 */
public class Ex03 {

	public static void main(String[] args) {
		/*
		 * 1. 실수? .소수점이 있는 수를 실수 라고 한다.
		 * ex) 3.14
		 * 	   3.0
		 * 	   3.	모두 실수이다
		 * 2.자바에서 숫자 → 실수형 - float(4), double(8)
		 * 	 3.626 실수
		 * 	 float	[s][8][][][][][][] [E][23][][][][][][] [][][][][][][][] [][][][][][][][]
		 * 				127+1=128
		 * 			0   1 0 0 0 0 0 0 1101
		 * 	 double [s][][][][][][][] [][][E][52][][][][] [][][][][][][][] [][][][][][][][][][][][][][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][]
		 * 	 
		 * 	 float 단정도 정밀도
		 * 	 double 배정도 정밀도 
		 * 실수는 어떻게 여기에 저장되는지 알아보도록 하자!
		 * 	
		 * 	 3.625 실수
		 * 	 3 →(2진수로 변환) → 11
		 * 	 0.625 →(2진수로 변환) → ? [1][0][1]
		 * 
		 * 	 0.625*2=[1].25
		 * 	 0.25*2 =[0].5
		 * 	 0.5*2=[1].0   //소수점이 0이 될때 까지 반복
		 * 	 :
		 * 	 :
		 *	 :
		 *	 부동소수점표기(앞에는 무조건 1이 나오게 하겠다)
		 *	 11.101
		 *   1.1101*2^1  
		 * 	  가수	지수
		 * 	 
		 * 	 
		 * 	 (기억)
		 * 	 9.1234567 유한소수 → 2진수 무한
		 * 						  1001.0001111100110101011011011...
		 * 						  부동소수점표기
		 * 						  1.0010001111100110101011011011...2^3
		 * 						  float 가수 23비트 0010001111110011010110
		 * 						  double 가수 52비트 00100011111100110101100010001111110011010110
		 * 
		 * 						  메모리 f/d 저장 오차발생하는 자료형 ****
		 * 그래서, 실수는 무조건 오차가 적은 double로 선언하기!!!!
		 * 
		 * 						  [ BigDecimal 클래스 ]
		 * 
		 */
		
		
		//[문제] 키와 몸무게 저장할 변수를 선언하세요..
		//키	:179.8cm	실수:float, double
		//몸무게:65.6kg		실수:float, double
		//Type mismatch: cannot convert from double to float
		//float height=179.8;
		float height=179.8f; //접미사 f, F
		
		/* 다른 자료형 타입이다.
		 * 0	int [][][][]
		 * 0.	double [][][][][][][][]
		 * 0D	double [][][][][][][][]
		 * 0F	float [][][][]
		 * 0L	long [][][][][][][][]
		 * 
		 * d, D, f, F, l, L 접미사...
		 */
		//float  =  double 타입 불일치
		double weight=65.6; //double weight=65.6d;, double weight=65.6D;도 가능
		
		System.out.printf("키=%f, 몸무게=%f\n", height, weight);

	}//main

}//class

 

4.Ex04)

package days03;

/**
 * @author kim
 * @date 2023. 1. 30.- 오후 2:51:34
 * @subject 형(type)변환 == 자료형 변환
 * @content 1.형변환?
 * 			2. 형변환 종류 2가지 설명
 *
 */
public class Ex04 {

	public static void main(String[] args) {
		/*
		 * 1.모든 변수, 리터럴은 자료형이 있다.
		 * 	자료형 변수명;
		 * 2. true, false → boolean
		 * 	 1, 2, 100 → int
		 *   3.14 → double
		 *   'A', 'X'→char
		 *   "홍길동" → string
		 * 3. 프로그램을 작성하다 보면 서로 다른 타입(자료형) 간의 연산을 수행할 때가 있다.
		 * 서로 다른 자료형을 일치시켜야 할 필요가 있다. → "형변환"이라고 한다.
		 * 
		 * 4.형변환
		 * 		1)강제 형변환
		 * 		2)자동 형변환(2가지 경우)
		 * 			ㄱ.작은자료형 +(연산) 큰자료형 → 자동으로 큰 자료형으로 전환
		 * 				double
		 * 
		 * 				[자료형의 크기]
		 * 				byte < short < int < long < float < double
		 * 						char
		 * 				long(8) < float(4) //long형과 float형중에서는 float이 더 큰다(메모리와 관련X)
		 * 			
		 * 			ㄴ. 좌측 큰 자료형 = 우측 작은 자료형일 떄 자동으로 형변환된다.
		 * 				int a=100;
		 * 				int b=100;
		 * 				double result = 300;
		 *  */
		
		int i = 100; //int 4바이트 정수 [][][][01101100]
		double d = 3.14; //float 8바이트 실수 : [0][][][][][][][]
		
		
		//100+3.14=103.14
		double result=d+i; //double d + int i 형변환 → 자동형변환이 double형으로된 사례
		System.out.println(result);
		
		//Type mismatch: cannot convert from double to float
		//좌측		우측
		// f 		 d
		//좌측보다 우측이 더 크기 때문에 자동형변환이 안된다.
		//float f = 3.14;
		//double q=3.14f;
		
		//byte -127~+127 정수 바이트
		//Type mismatch: cannot convert from double to float
		//			 int
		//byte age = 300; 자동형변환
		
		//[강제형변환 설명]
		//우측 자료형이 좌측 자료형보다 큰 자료형이기 때문에 자동 형변환이 되지 않는다.
		//float f = 3.14;
		//1)float f = 3.14f; 3.14가 float형이라고 지정해주는 방법1
		
		//double → float 강제로 형변환
		//이때 사용하는 연산자가 "cast 연산자"
		//"cast 강제 형변환"이라고 한다.
		//float f = 3.14;
		float f=(float)3.14;
		
		//연산자 우선 순위:곱셈 > 덧셈
		//3+5*2
		//13
		
		//()최우선 연산자
		

	}//main

}//class

 

5.Ex04_02)

package days03;

/**
 * @author kim
 * @date 2023. 1. 30.-오후 3:33:16
 * @subject 형변환 예제
 * @content 래퍼 클래스? 기본형을 사용하기 쉽도록 포장(가공, 구현)해 놓은 클래스
 * 
 * 			Integer.MAX_VALUE
 * 			Integer.MIN_VALUE
 *
 */
public class Ex04_02 {

	public static void main(String[] args) {
		//int i = 2147483647;
		//기본형 → 래퍼(wrapper)클래스 : 기본형이 사용하기 쉽도록 가공한 클래스를 래퍼 클래스
		// int → integer 클래스
		int i = Integer.MAX_VALUE;
		int j=100;
		int k=i+j;
		//long k=i+j;도 2147483647 + 100 = -2147483549이 나온다 왜냐하면 이미 i+j값이 반영되서 k값에 할당되는것 때문
		long q=(long)i+j;
		
		//i=[][][][]
		//j=[][][][]
		//k=[][][][] int 표현할 수 있는 값의 범위를 벗어난다. 산술 오버/언더플로우
		
		System.out.printf("%d + %d = %d\n%d", i, j, k, q);
		//2147483647 + 100 = -2147483549
		

	}

}

 

6.Ex05)

package days03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author kim
 * @date 2023. 1. 30.-오후 3:52:47
 * @subject
 * @content 형변환, 표준입출력
 *
 */
public class Ex05 {

	public static void main(String[] args) throws IOException {
		// [이름, 국어, 영어, 수학] 입력받아서
		//총점, 평균 계산
		//이름은 홍길동이고, 국어=90, 영어=89, 수학=78, 총점=???, 평균=??.??이다." 출력
		String name ="홍길동";
		byte kor=90;
		byte eng=89;
		byte math=78;
		short total; //byte는 총점합이 최대 300인데, byte의 127값이 넘어가므로
		double avg;
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.print(">이름 입력? ");
		name=br.readLine();
		
		System.out.print(">국어 입력? ");
		//Type mismatch: cannot convert from String to byte
		//byte  string 
		kor=Byte.parseByte(br.readLine()); //readLine() 함수는 입력받은 값을 String(문자열)으로 반환하는 함수
		//형일치 코딩...
		//기본형 byte → 래퍼클래스 Byte.parseByte() 함수 메서드
		//String → byte로 형변환시켜줘야 한다.
		
		System.out.print(">영어 입력? ");
		eng=Byte.parseByte(br.readLine());
		
		System.out.print(">수학 입력? ");
		math=Byte.parseByte(br.readLine());
		
		//Type mismatch: cannot convert from int to short
		//short = int
		//	 =우측항 연산먼저
		//		b + b + b : why? int형이 되어서 Type mismatch오류가 나는것 일까?
		//CPU 처리: int보다 작은 자료형은 int로 처리하기 때문에 저 값을 int로 처리해서 int값이 나온다.
		//cast연산자를 사용해서 강제 형변환이 필요한다.
		total=(short)(kor+eng+math);  //(kor+eng+math)가 최우선 연산자
		avg=(double)total/3;
		
		
		//java.util.IllegalFormatConversionException: d != java.lang.Double
		//					잘못된 형식 conversion 예외
		//								%d, f, c, b, s
		//1, 2, 4 → 평균:2.3333333333333333333333
		//출력값은?→평균:2.000000
		//이유는 avg=total/3;
		//	 double =short/int 인트형으로 이미 계산이 끝났기 때문에 강제 형 변환 필수
		System.out.printf("이름은 %s이고, 국어=%d, 영어=%d, 수학=%d, 총점=%d, 평균=%f이다.", name, kor, eng, math, total, avg);

		//long은 자료형 Long은 래퍼클래스
		//double은 자료형 Double은 래퍼 클래스
		
	}//main

}//class

 

7.Ex05_2)

package days03;

public class Ex05_02 {

	public static void main(String[] args) {
		String s="90";
		//String → int 형변환
		//int kor=Integer.parseInt(s); //"90"->90
		
		//String → Long 형변환
		//long kor=Long.parseLong(s); //"90"->90
		
		//String → Short 형변환
		//short kor=Short.parseShort(s); //"90"->90
		
		//String → Float 형변환
		//float kor=Float.parseFloat(s);
		
		//String → Double 형변환
		//double kor=Double.parseDouble(s);



	}

}

 

8.Ex06)

package days03;

/**
 * @author kim
 * @date 2023. 1. 30.-오후 4:55:13
 * @subject 연산자(operator)
 * @content
 *
 */
public class Ex06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * 1.연산자(operator)
		 * 	 1)정의: "연산을 수행하는 기호"를 연산자라고 한다. ex)+, -, *, /등등
		 * 	 2)피연산자(operand):연산의 대상
		 * 		ex) 3 + 5
		 * 			  + 연산자
		 * 			3   5연산의 대상(피연산자)
		 * 2.식(expression)
		 * 	 1)연산자와 피연산자를 조합하여 계산하고자 하는 바를 표현한 것.
		 * 
		 * 3.연산자의 종류
		 * 	 1)항(피연산자)의 갯수에 따라	단항, 이항, 삼항 연산자
		 * 		3 + 5 덧셈연산자(피연산자 반드시 2개필요)==이항연산자, 연산의 대상(피연산자)의 갯수에 따라 단항, 이항...
		 * 	 2)기능에 따라서
		 * 		ㄱ.산술연산자	+
		 * 		ㄴ.비교연산자	Ex06_02.java
		 * 		ㄷ.논리연산자
		 * 		ㄹ.대입연산자
		 * 		등등
		 * 
		 */
		
		//ㄱ.산술연산자(이항연산자)
		int i=10, j=3;
		System.out.println(i+j); //13
		System.out.println(i-j); //7
		System.out.println(i*j); //30
		System.out.println(i/j); //3 결과값 자체가 (int)/(int)형이기 때문에
		System.out.println(i%j); //나머지 연산자

		//(주의할점)
		//System.out.println( 10/0 ); //정수/0  java.lang.ArithmeticException(산술적예외) 발생: / by zero
		//System.out.println( 10%0 ); //정수%0  java.lang.ArithmeticException(산술적예외) 발생: / by zero
		//정수를 0으로 나누건, 나머지를 구하든, 항상 산술적 예왹가 발생한다.
		
		System.out.println( 10.0/0 ); //실수/0 infinity(무한대)
		System.out.println( 10.0%0 ); //NaN(Not a Number 숫자가 아니다.)
		
		
	}//main()

}//class

 

9.Ex06_2)

package days03;

/**
 * @author kim
 * @date 2023. 1. 30.-오후 5:22:19
 * @subject 비교연산자:		>	<   >=	<=  ==(같다의 의미로는 =이 2개) !=(느낌표 =, 항상 느낌표 먼저)
 * @content ㄴ 비교연산자의 결과값은 Boolean형이다.(True/False)
 *
 */
public class Ex06_02 {

	public static void main(String[] args) {
		// 
		int i=10,j=5;
		System.out.println(i>j); //True
		System.out.println(i<j); //False
		System.out.println(i>=j); //True
		System.out.println(i<=j);  //False
		System.out.println(i==j); //False
		System.out.println(i!=j); //True
		
		//(주의할점)
		System.out.println(i=j); //5 =은 같다의 연산자가 아니다. 대입연산자이다. j값을 i에 넣겠다. i=5, j=5가 되어서 5나옴
		System.out.println(i==j); 
		
		//논리연산자 ~~ (내일)
		

	}

}
728x90