if문

if문은 조건식의 결과에 따라 블록 실행 여부가 결정 ( true, false ), ( boolean타입 )

true면 블록 실행, false면 실행 안함

		int score = 93;
		
		if(score>=90) {
			System.out.println("점수가 90보다 큽니다.");
			System.out.println("A등급");
		}
		if (score<90) {
			System.out.println("점수가 90보다 작습니다.");
			System.out.println("B등급");
		}

 

if - else문

if문의 조건식이 true이면 if문의 블록이 실행, 조건식이 false이면 else 블록이 실행

조건식의 결과에 따라 이 2개의 블록 중 어느 한 블록의 내용만 실행하고 전체 if문을 벗어남

		int score = 90;
		
		if (score >= 93 && score <= 100) {
			System.out.println("A등급");
		}else {
			System.out.println("B등급");
		}

 

if - else else if 문

조건문이 여러 개인 if문, 처음 if문의 조건식이 false일 경우 다른 조건식의 결과에 따라 실행 블록 선택

else if문의 수는 제한이 없음, 여러 개의 조건식 중 true가 되는 블록만 실행하고 전체 if문을 벗어남

else if 블록의 마지막에는 else 블록을 추가할 수 있는데, 모든 조건식이 false일 경우 else 블록 실행 

		int score = 75;
		
		if(score>=90) {
			System.out.println("점수가 100~90 입니다.");
			System.out.println("A등급");
		} else if(score>=80) {	
			System.out.println("점수가 80~89 입니다.");
			System.out.println("B등급");
		} else if(score>=70) {
			System.out.println("점수가 70~79 입니다.");
			System.out.println("C등급");
		} else {
			System.out.println("점수가 70 입니다.");
			System.out.println("D등급");
		}

 

switch문

switch문은 if문과 마찬가지로 조건 제어문 이지만 switch문은 if문처럼 조건식이 true일 경우에

블록 내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택

if문은 조건식 결과가 true, false 두 가지밖에 없기 때문에 경우에 수가 많아질수록 else-if문을

반복적으로 추가해야 하므로 코드가 복잡해지지만 switch문은 변수의 값에 따라서 실행문이

결정되기 때문에 같은 기능의 if문보다 코드가 간결해짐

 

 

		int dnum = (int) (Math.random() * 6) + 1;
		
		switch (dnum) {
		case 1:
			System.out.println("1번이 나옴");
			break;
		case 2:
			System.out.println("2번이 나옴");
			break;
		case 3:
			System.out.println("3번이 나옴");
			break;
		case 4:
			System.out.println("4번이 나옴");
			break;
		case 5:
			System.out.println("5번이 나옴");
			
			break;

		default: 
			System.out.println("6번이나옴");
			break;
		}

 

		Scanner scanner = new Scanner(System.in);
		String inputData;
		int score;
		
		
		System.out.print("학점>");
		inputData = scanner.nextLine();
		score = Integer.parseInt(inputData);
		int num = score / 10;
		switch (num) {
		case 10:
		case 9:
			System.out.println("a");
			break;
			
		case 8:
			System.out.println("b");
			break;
			
		case 7:
			System.out.println("c");
			break;

		default:
			break;
		}

 

반복문 for문

for문은 주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문

		//for (int i = 1; i <= 100; i++) {
			//System.out.println(i);
		//} // 1부터 100까지 구하는 for문
        
        int sum = 0;
        
        for (int i = 1; i <= 100; i++) {
        sum + i; 
        }
        System.out.println(sum) // 1부터 100까지의 합
package sec02.exam03;

public class ForSumFrom1To100Example1 {
	public static void main(String[] args) {
		int sum = 0; 
		
		int i = 0;
		for(i=1; i<=100; i++) {
			sum += i;
		}
		
		System.out.println("1~" + (i-1) + " 합 : " + sum);
		// (i-1) -> 루프 카운터 변수 ( float 사용 금지 )
	}
}

 

중첩 for문

바깥쪽 for문이 한 번 실행할 때마다 중첩된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로

돌아감 ( 구구단, 별찍기 ) 

		for ( int i = 1; i <= 4; i++) {

			for (int j = 1; j <= i; j++) {
				
				System.out.print("*");
		
	}
			System.out.println();
		}
//결과
//*
//**
//***
//****

 

		for ( int i = 1; i <= 4; i++) { 
//			내부 for문 앞에 공백 i 갯수 빼면서 역순 3, 2, 1
			for (int y = 1; y <= 4 -i; y++  ) { 
				System.out.print(" ");
			}
//			내부 for문 i에 개수 만큼 " * " 출력
			for (int j = 1; j <= i; j++) {
				System.out.print("*");
			}
//			1줄 만들때 마다 줄 바꿈
			System.out.println();
	}
//결과
//   *
//  **
// ***
//****

 

실습

10 자리 이하 버리는 코드

		int value = 356;
		System.out.println(value / 100 * 100);

 

사다리꼴의 넓이 구하는 코드

		int lengthTop = 5;
		int lengthBottom = 10;
		int height = 7;
		
		double area = ((double)(lengthTop * height) / 2)+((lengthBottom * height) / 2);
		System.out.println(area); // 52.5

 

scanner 사용 실수(double) 0, 0.0 무한대

		Scanner scanner = new Scanner(System.in);
		double one;
		double two;
		double tot;
		
		
		
		System.out.print("첫번째 수:");
		one = (scanner.nextDouble());
		System.out.print("두번째 수:");
		two = (scanner.nextDouble());
		
		
		tot = one / two;  
		System.out.println("결과:" + tot);

 

반지름 double 특정 구간 변환

		int var1 = 10;
		int var2 = 3;
		int var3 = 14;
		
		
		double var4 = var1 * var1 * Double.parseDouble(var2 + "." + var3);
		
		System.out.println("원의 넓이 :" + var4);

 

로그인, 패스워드  지정값 scanner

		Scanner scanner = new Scanner(System.in);
		
		System.out.println("아이디:");
		String name = scanner.nextLine();
		
		System.out.println("패스워드:");
		String pass = scanner.nextLine();
		int password = Integer.parseInt(pass);
		
		if (name.equals("java")) {
			if (password == 12345) {
				System.out.println("로그인 성공");
			}else {
				System.out.println("로그인 실패 : 패스워드가 틀림");
			}
			
			}
		else {
			System.out.println("로그인 실패: 아이디가 존재하지 않음");
		}

 

for문 이용 1부터 100까지의 정수 3의 배수의 총합

		int sum = 0;
		
		for (int i = 0; i < 100; i+=3 ) {
			 
			sum += i;
		}
		System.out.println(sum);

 

주사위 2개 사용 합이 5가 되면 stop

		while(true) {
			int num = (int) (Math.random() * 6) + 1;
			int num2 = (int) (Math.random() * 6) + 1;
			System.out.println(("눈1:" + num + "눈2:" + num2));
			
			if ((num + num2) == 5) {
				break;
			}
			System.out.println(num + num);
			
		}

 

중첩 for문, 4x + 5y = 60의 모든 해

		for (int y= 1; y <= 10; y++) {
			for(int x = 1; x <= 10; x++) {
				if (( 4 * x + 5 * y) == 60) {
				System.out.println("x=" + x + "y=" + y);
				}
			}
		}

 

while문 scanner 사용, 은행 예금, 출금, 조회, 종료

		boolean run = true;
		int balance = 0;
		Scanner scan = new Scanner(System.in);
		String inputData, inputNum;
		int deposit = 0; // 잔고
		
		
		while (run) {
			System.out.println("--------------------------");
			System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
			System.out.println("--------------------------");
			System.out.print("선택>");
			
			 inputData = scan.nextLine().toUpperCase(); // 입력값을 대문자로 변환
			  if (inputData.equals("1")) {
	                System.out.print("예금>");
	                inputNum = scan.nextLine(); // 키보드 입력
	                int tmp = Integer.parseInt(inputNum); // 정수로 변환
	                deposit += tmp; // 잔고에 누적
	                System.out.println("예금액> " + deposit); // 잔고 출력
	            } else if (inputData.equals("2")) {
	                System.out.print("출금>");
	                inputNum = scan.nextLine(); // 키보드 입력
	                int tmp = Integer.parseInt(inputNum); // 정수로 변환
	                deposit -= tmp; // 잔고에서 차감
	                if (deposit < 0) {
	                    System.out.println("출금액>");
	                    deposit += tmp; // 출금한 금액을 다시 잔고에 더해줌
	                } else {
	                    System.out.println("출금액> " + deposit); // 잔고 출력
	                }
	            } else if (inputData.equals("3")) {
	                if (deposit <= 0) {
	                    System.out.println("잔고가 없습니다.");
	                } else {
	                    System.out.println("잔고: " + deposit); // 출력
	                }
	            if (inputData.equals("4")) { // 입력값이 "Q"일 때 루프 종료
	                break;
	            }
			
		}
		 while (deposit < 0) { // 잔액이 0보다 작거나 같을 때 계속 반복
	            System.out.println("잔액이 부족합니다.");
	            break; // 반복 후 종료
	        }
		System.out.println("프로그램 종료");
		}

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-24 7일차  (2) 2023.05.24
2023-05-23 6일차  (0) 2023.05.23
2023-05-19 4일차  (0) 2023.05.19
2023-05-18 3일차  (0) 2023.05.18
2023-05-17 2일차  (0) 2023.05.17

모니터로 변수값 출력하기

println(내용); : 괄호안의 내용을 출력하고 행을 바꿔라

print(내용); : 괄호 안의 내용을 출력만 해라

printf(내용); : 괄호 안의 첫 번째 문자열 형식대로 내용을 출력해라

printf("형식문자열", 값1, 값2, '''')

%형는 형식 문자열의 시작을 뜻함

conversion에는 제공되는 값의 따라 d(정수), f(실수), s(문자열)

형식 문자열에 포함될 값이 2개 이상일 경우 값의 순번을 알려줘야함

System.out.printf("전화: %1$s-%2$s-%3$s", "010", 123, 4567);

 

flags는 빈 자리를 채우는 방법, 생략되면 왼쪽 공백으로 채워지고, -가 오면 오른쪽 공백으로 채워짐 

0은 공백 대신 0으로 채움

%6d : 6자리 정수, 왼쪽 빈 자리 공백 =123

%-6d : 6자리 정수, 오른쪽 빈 자리 공백 = ___123

%06d : 6자리 정수, 왼쪽 빈 자리 공백 0 채움 = 000123

%10.2f : 소수점 이상 7자리, 소수점 이하 2자리, 왼쪽 빈 자리 공백 : ___123.45

 

Scanner

 

 

 

 

package chap02_2;

import java.util.Scanner;

public class scanner_01 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String inputData;
		
		
		System.out.println("입력>");
		while(true) {
			inputData = scanner.nextLine();
			System.out.println("입력된 문자열: \"" + inputData + "\"");
			
			boolean result = inputData.equals("김씨");
			System.out.println(result);
//			
			
			if (inputData.equals("q")) {
				break;
			}
			
		}
				System.out.println("종료");
		
	}

}

 

 

연산자와 연산식

연산에 사용되는 표시나 기호를 연산자, 연산되는 데이터 피연산자, 연산의 과정 기술 한 것은 연산식

산술 연산자일 경우는 숫자 타입 ( byte, short, int, long, float, double ) 으로 결과값

비교 연산자와 논리 연산자는 논리 타입(boolean)으로 결과값

연산식은 반드시 하나의 값을 산출

*, /, % 는 같은 우선순위 왼쪽에서 오른쪽 방향으로 연산

단항 연산자(++, --, ~, !), 부호 연산자(+, -), 대입 연산자(=, +=, -=, ..)는 오른쪽에서 왼쪽 방향으로 연산

( ) 괄호 부분의 연산은 최우선순위 필요할 때 사용

 

연산자의 종류

 

단항 연산자 

부호 연산자(+, -), 증감 연산자(++, --), 논리 부정 연산자( ! )

int x = -100;

int result1 = +x; 

int result2 = -x;

result1은 음수 -100이 그대로 저장

result2은 양사 100이 저장

byte 타입 변수를 부호연산하면 int 타입으로 변환

 

증감 연산자

package sec02.exam01;

public class SignOpEx {

	public static void main(String[] args) {
		int x = 10;
		int y = 10;
		int z;
		
		System.out.println("-----------------");
		x++;
		++x;
		System.out.println("x=" + x);// 12
		
		System.out.println("-----------------");
		y--;
		--y;
		System.out.println("y=" + y);// 8
		
		System.out.println("-----------------");
		z = x++;
		System.out.println("z=" + z);//12
		System.out.println("x=" + x);//13
		
		System.out.println("-----------------");
		z = ++x;
		System.out.println("z=" + z);//14
		System.out.println("x=" + x);//14
		
		System.out.println("-----------------");
		z = ++x + y++;
		System.out.println("z=" + z);//23
		System.out.println("x=" + x);//15
		System.out.println("y=" + y);//9
		
		boolean play = true;
		System.out.println(!play);//false
		
		boolean play2 = !true;
		System.out.println(!play2);//true
		
		float f1 = 0.1f;
		System.out.printf("%1.20f\n", f1);//0.10000000149011612000 
										// 소수점 이상 1, 소수점 이하 20 
										// ( float은 소수점 이하 7자리까지 맞음 ) 
		
		double d1 = 0.1;
		System.out.printf("%1.20f\n", d1);//0.10000000000000000000
										// 소수점 이상 1, 소수점 이하 20 
										// ( double은 소수점 이하 15자리까지 맞음 )
		

		
		
		
		
	}

}

 

이항 연산자

/ 나누기, %나머지

long타입을 제외한 정수 타입 연산은 int타입으로 산출되고

피연산자 중 하나라도 실수 타입이면 실수 타입으로 산출

byte + byte -> int + int = int

int + long -> long + long = long

int + double -> double + double = double

package sec02.exam01;

public class sjh {

	public static void main(String[] args) {
//		잘못된 코딩 예
		byte byte1 = 1;
		byte byte2 = 1;
//		byte byte3 = byte1 + byte2; 컴파일 에러
//		올바른 코딩 예
		int result3 = byte1 + byte2;
		

	}

}

 

package sec02.exam01;

public class sjh {

	public static void main(String[] args) {
		int int1 = 10;
		int int2 = 4;
		
		int result2 = int1 / int2;
		double result3 = int1 / int2;
		double result4 = (double)int1 / int2;
		System.out.println(result2); // 2
		System.out.println(result3); // 2.0
		System.out.println(result4); // 2.5

	}

}

int1 / int2 연산 후의 결과가 2이므로 2를 실수화해서 2.0이 저장됨

2.5 결과를 얻고 싶다면 int1과 int2 중 하나를 (double) 강제 타입 변환해야 됨

 

 

문자열 결합 연산자(+)

package sec02.exam01;

public class sjh {

	public static void main(String[] args) {
		String str1 = "JDK" + 6.0;
		String str2 = str1 + "특징";
		System.out.println(str1); // JDK6.0
		System.out.println(str2); // JDK6.0특징
		
		System.out.println("JDK" + 3 + 3.0); // JDK33.0
		System.out.println(3 + 3.0 + "JDK"); // 6.0JDK
		
		
	}

}

 

비교연산자 

피연산자가 char 타입이면 유니코드 값으로 비교 연산을 수행,

'A'의 유니코드는 65이고, 'B'의 유니코드는 66이므로 비굔 연산자는 65와 66을 비교

('A' < 'B') -> (65 < 66)

비교 연산자에서도 연산을 수행하기 전에 피연산자의 타입을 일치 시킴

'A' == 65 -> 65 == 65 -> true

3 == 3.0에서 3이 double 타입으로 변환되어 3.0 == 3.0 비교

3 == 3.0 -> 3.0 == 3.0 -> true

한 가지 예외는 0.1 == 0.1f와 같은 경우에는 false가 됨

0.1f는 0.1의 근사값(0.100000223234) 표현되기 때문에

해결법은 모두 float타입은 바꾸거나 정수로 변경

 

논리 연산자

&&, || 는 앞의 피연산자가 true, false면 뒤의 피연산자를 평가하지 않고 바로 결과 내림

 

 

 

대입 연산자

 

package sec02.exam01;

public class Ex002 {

	public static void main(String[] args) {
		int result = 0;
		result +=10;
		System.out.println("result=" + result);
		result -=5;
		System.out.println("result=" + result);
		result *=3;
		System.out.println("result=" + result);
		result /=5;
		System.out.println("result=" + result);
		result %=3;
		System.out.println("result=" + result);

	}

}
//결과
//result=10
//result=5
//result=15
//result=3
//result=0

 

삼항 연산자

 

조건식을 연산하여 true가 나오면 삼항 연산자의 결과는 피연산자2가 됨

반대로 조건식을 연산하여 false가 나오면 삼항 연산자의 결과는 피연산자3

 

실습

scanner

package chap02_2;

import java.util.Scanner;

public class scanner_01 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String inputData;
		
		
		System.out.println("입력>");
		while(true) {
			inputData = scanner.nextLine();
			System.out.println("입력된 문자열: \"" + inputData + "\"");
			
			boolean result = inputData.equals("김씨");
			System.out.println(result);
//			
			
			if (inputData.equals("q")) {
				break;
			}
			
		}
				System.out.println("종료");
		
	}

}
package chap02_2;

import java.util.Scanner;

public class scanner_02 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("첫번째 수:");
		String strNum1 = scanner.nextLine();
		int num1 = Integer.parseInt(strNum1);
		
		
		System.out.print("두번째 수:");
		String strNum2 = scanner.nextLine();
		int num2 = Integer.parseInt(strNum2);
		
		int result = num1 + num2;
		System.out.println("합계"+result);

	}

}
package sec02.exam01;

import java.awt.GraphicsDevice;
import java.util.Scanner;

public class study {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int kor, math, eng, tot, grade;
		double avg;
		int score = 100;
		
		
		
		System.out.print("국어");
		kor = Integer.parseInt(scanner.nextLine());
		System.out.print("수학");
		math = Integer.parseInt(scanner.nextLine());
		System.out.print("영어");
		eng = Integer.parseInt(scanner.nextLine());
		System.out.print("학생");
		String name = scanner.nextLine();
		
		tot = kor + math + eng; 
		avg = tot / 3.0;
		grade = (kor >= 90 ) ? 'A' : ((kor >=80) ? 'B' : 'C');
		System.out.printf("국어점수: %d (%c)\n", kor, grade);
		grade = (math >= 90 ) ? 'A' : ((math >=80) ? 'B' : 'C');
		System.out.printf("수학점수: %d (%c)\n", math, grade);
		grade = (eng >= 90 ) ? 'A' : ((eng >=80) ? 'B' : 'C');
		System.out.printf("영어점수: %d (%c)\n", eng, grade);
		
		System.out.println("학생이름:" + name);
		System.out.println("국어점수:" + kor);
		System.out.println("수학점수:" + math);
		System.out.println("영어점수:" + eng);
		System.out.println("총점:" + tot);
		System.out.printf("평균:%3.2f\n:" , avg);
		
		
		
		
	}

}
package sec02.exam01;

import java.util.Scanner;

public class study2 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int kor, math, eng, tot, grade;
		double avg;
		int score = 100;
		
		System.out.print("국어");
		kor = Integer.parseInt(scanner.nextLine());
		System.out.print("수학");
		math = Integer.parseInt(scanner.nextLine());
		System.out.print("영어");
		eng = Integer.parseInt(scanner.nextLine());
		System.out.print("학생");
		String name = scanner.nextLine();
		
		tot = kor + math + eng;
		avg = tot / 3.0;
		
		if (kor >= 90) {
			grade = 'A';
		}else if(kor >= 80) {
			grade = 'B';
		}else {
			 grade = 'C';
			
		}
		System.out.printf("국어점수: %d (%c)\n", kor, grade);
		
		if (math >= 90) {
			grade = 'A';
		}else if(math >= 80) {
			grade = 'B';
		}else {
			 grade = 'C';
			
		}
		System.out.printf("국어점수: %d (%c)\n", kor, grade);
		
		if (eng >= 90) {
			grade = 'A';
		}else if(eng >= 80) {
			grade = 'B';
		}else {
			 grade = 'C';
			
		}
		System.out.printf("국어점수: %d (%c)\n", kor, grade);

	}

}

 

나머지 실습

package sec02.exam01;

public class tests {

	public static void main(String[] args) {
		String name = "감자바";
		int age = 25;
		String tel1="010", tel2="123", tel3="4567";
		
		System.out.println("이름:" + "감자바");
		System.out.print("나이: 25\n");
		System.out.printf("전화: %1$s-%2$s-%3$s", "010", 123, 4567);
		
		int x11 = 10;
		int x12 = 3;
		System.out.println(x11/x12); // 몫
		System.out.println(x11%x12); // 나머지
	}

}
//삼항
package sec02.exam01;

import java.awt.desktop.ScreenSleepEvent;

import javax.swing.plaf.basic.BasicInternalFrameTitlePane.IconifyAction;

public class Ex003 {

	public static void main(String[] args) {
		int score = 85;
		char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
		System.out.println(score + "점은" + grade + "등급입니다.");
	}	 
		
	}

 

package sec02.exam01;

public class Ex001 {

	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 10;
		boolean result1 = (num1 == num2);
		boolean result2 = (num1 != num2);
		boolean result3 = (num1 <= num2);
		System.out.println("result1" + result1);
		System.out.println("result2" + result2);
		System.out.println("result3" + result3);
		
		char char1 = 'A';
		char char2 = 'B';
		boolean result4 = (char1 < char2);
		System.out.println("result4" + result4);
		

	}

}

//결과
//result1true
//result2false
//result3true
//result4true

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-23 6일차  (0) 2023.05.23
2023-05-22 5일차  (0) 2023.05.22
2023-05-18 3일차  (0) 2023.05.18
2023-05-17 2일차  (0) 2023.05.17
2023-05-16 1일차  (0) 2023.05.16

문자 타입

char 타입 : 하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴임

유니코드로 변환되어 저장

'A'는 10진수로 65, 16진수로 0x0041 

char 변수에 직접 저장 가능

int var2 = 'A'; 출력시 65출력

char var3 = 'A' 출력시 A 출력

 

String( 문자열 ) 타입

큰따옴표(")로 감싼 문자 또는 여러 개의 문자들로 저장 가능

유니코드로 변환되어 저장되지 않음

문자열 내부에 역슬래시(\)가 붙은 문자 사용 가능 ( 이스케이프 문자 )

/t 탭만큼 띄움, /n 줄 바꿈(라인 피드), /r 캐리지리턴, /" 큰따옴표 출력

\\ 역슬래쉬 출력, \u16진수 16진수 유니코드 출력

 

실수 타입

소수점이 있는 실수 리터럴을 저장할 수 있는 타입 float, double이 있음

정밀도 수에 따라 소수점 뒤에 있는 숫자 정확도가 틀림 float은 7자리, double은 15자리

알파벳 소문자 e 또는 대문자 E가 포함되어 있는 숫자 리터럴은 지수와 가수로 표현된

소수점이 있는 10진수 실수로 인식

기본적으로 double 타입 변수에 저장 double var = 3.14

 

논리 타입

참과 거짓을 의미하는 true와 false를 사용

조건문과 제어문의 실행 흐름을 변경하는데 많이 사용

 

 

 

자동 타입 변환

값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생

큰 허용 범위 타입 <- 작은 허용 범위 타입

byte < short < int < long < float < double

정수 타입이 실수 타입으로 저장될 경우에는 무조건 자동 타입 변환 

실수 타입은 정수타입보다 허용 범위가 더 크기 때문에

char 타입의 경우 int 타입으로 자동 타입 변환되면 유니코드 값이 int 타입에 저장 

char charVal = 'A';

int intVal = charVal; ( 65 저장 )  

char 타입의 허용범위는 음수를 포함하지 않기 때문에 자동타입변환 x ( 컴파일 에러 )

 

강제 타입 변환

큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환될 수 없음

하지만 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장 가능 이것이 강제 타입 변환

강제 타입 변환은 캐스팅 연산자 괄호 ( ) 를 사용, 괄호 안에 들어가는 타입은 나누는 단위

작은 허용 범위 타입 <- ( 작은 허용 범위 타입 ) 큰 허용 범위 타입

int intVar = 10;

byte byteVar = ( byte ) intVal // 강제 타입 변환

 

int intVar = 65;

char charVar = ( char ) intVar

s.o.p( charVar ); // "A"가 출력

 

double doubleVar = 3.14;

int intVar = ( int ) doubleVar; // 소수점 이하 부분은 버려지고 3 저장

 

 

정수 연산에서의 자동 타입 변환

정수 타입 변수가 산술 연산식에서 피연산자로 사용되면  int 타입보다 작은 byte, short 타입의 변수는

int 타입으로 자동 타입 변환되어 연산을 수행합니다.

 

1. byte 타입 변수가 피연산자로 사용된 경우

byte x = 10;

byte y = 20;

byte result = x + y; // 컴파일 에러

int result = x + y;

 

2. int 타입 변수가 피연산자로 사용된 경우 

int x = 10;

int y = 20;

int result = x + y;

타입 변환이 줄면 실행 성능 향상 2번째 코드가 적절함

 

두 피연산자 중 허용 범위가 큰 타입으로 변환되어 연산을 수행

 

 

실수 연산에서의 자동 타입 변환

실수 타입 변수가 산술연산식에서 피연산자로 사용될 경우 두 피연산자가 동일한 타입이라면 해당 타입으로

연산되지만, 피연산자 중 하나가 double 타입이라면 다른 피연산자도 double 타입으로 자동 타입 변환되어 연산 수행, 따라서 연산 결과는 doble 타입이 됨

 

                          float   double

double result = 1.2f + 3.4

                           float이 double로 변경되서 double + double로 연산되어 result에 저장

int도 동일 

 

만약 int 타입으로 연산을 해야 한다면 double 타입을 int 타입으로 강제 변환하고 덧셈 연산을 수행

int intVar = 10;

double doubleVar = 5.5;

int result = intVar + (int) doubleVar; // 15가 저장됨

 

int x = 1;

int y = 2;

double result = x / y;

s.o.p(result); // 연산 결과는 0이 나옴 

위 코드 결과가 0.5가 되기 위해서는 x / y를 정수 연산이 아니라 실수 연산으로 변경 해야됨

 

3가지 방법

1.

int x = 1;

int y = 2;

double result = (double)x / y;

 

2.

int x = 1;

int y = 2;

double result = x / (double)y;

 

3.

int x = 1;

int y = 2;

double result = (double)x / (double)y;

 

(double) (x / y)로 연산시 0.5가 아니라 0.0출력 이유는 (x / y)가 먼저 연산되어 0이 되고 (double) 0.0이 됨

 

 

+연산에서의 문자열 자동 타입 변환

System.out.println(10+2+8);// 20
System.out.println(10+2+"8");// 128
System.out.println(10+"2"+8);// 1028
System.out.println("10"+2+8);// 1028
System.out.println(""+2+8);// 28 (""뒤에 부터 문장열)

System.out.println("10"+ ( 2+8 ));// 1010

 

 

 

실습

package sec02.exam02;

public class Ex001 {

	public static void main(String[] args) {
		long var1 = 10;
		long var2 = 20L;
//		long var3 = 3000000000; 컴파일 에러
		long var4 = 3000000000L; 
		
		char var5 = 'A'; 
		char var6 = 65;
		char var7 = '\u0041';
		
		char var8 = 'A';
//		char var9 = "A"; 컴파일 에러
		String var10 = "A";
		
		String var11 = "\t A"; // 이스케이프
		String var12= "\" A";
		
		double var13 = 3e6;
		float  var18 = 1e2f;
		
		float var14 = 3.14f;
		double var15 = 3.14;
//		double var19 = 2e-350; -324까지 가능
		
		boolean var16 = false;
		boolean var17 = true;
		if (var16) { // true면 출력 false면 출력x
			System.out.println(var5);
			System.out.println(var6);
			System.out.println(var7);
			
			System.out.println(var10);
			System.out.println(var11);
			
			System.out.println(var13);
			
		}
		
		System.out.println(var5);
		System.out.println(var6);
		System.out.println(var7);
		
		System.out.println(var10);
		System.out.println(var11);
		
		System.out.println(var13);
		

	}

}

 

package sec02.exam02;

public class Ex002 {

	public static void main(String[] args) {
		//강제 타입변환
		int intValue = 10;
		byte byteValue = (byte)intValue;
		
		// "A"가 출력
		int intValue2 = 65;
		char charValue = (char)intValue2;
		
		//intValue3는 정수 부분인 3만 저장
		double doubleValue = 3.14;
		int intValue3 = (int)doubleValue;
		
		//intValue4는 int 최대 값 21억 출력
		double doubleValue2 = 3000000000.0;
		int intValue4 = (int)doubleValue2;
		System.out.println(intValue4);
		
		

	}

}

 

package sec02.exam02;

public class Ex003 {

	public static void main(String[] args) {
		byte byteValue1 = 10;
		byte byteValue2 = 20;
//		byteValue3 = byteValue1 + byteValue2; 컴파일 에러
		int byteValue3 = byteValue1 + (int)byteValue2;
		System.out.println(byteValue3);
		
		char charValue1 = 'A';
		char charValue2 = 1;
//		char charValue3 = charValue1 + charValue2; 컴파일 에러
		int charValue3 = charValue1 + charValue2;
		System.out.println("유니코드="+charValue3);
		System.out.println("출력문자="+(char)charValue3);
		
		int intValue3 = 10;
		int intValue4 = intValue3/4;
		System.out.println(intValue4);
		
		int intValue5 = 10;
//		int intValue6 = 10/4.0; 컴파일 에러
		double doubleValue = intValue5 / 4.0;
		System.out.println(doubleValue);
		
		int x = 1;
		int y = 2;
		double result = (double)x / y;
		System.out.println(result);
		
		
		
	}

}

 

package sec02.exam02;

public class Ex004 {

	public static void main(String[] args) {
//		System.out.println(10+2+8);// 20
//		System.out.println(10+2+"8");// 128
//		System.out.println(10+"2"+8);// 1028
//		System.out.println("10"+2+8);// 1028
//		System.out.println(""+2+8);// 28 (""뒤에 부터 문장열)
		
		
		int value1 = Integer.parseInt("10");
		double value2 = Double.parseDouble("3.14");
		boolean value3 = Boolean.parseBoolean("true");
		
		System.out.println("value1:" + value1);
		System.out.println("value2:" + value2);
		System.out.println("value3:" + value3);
		
		String str1 = String.valueOf(10);
		String str2 = String.valueOf(3.14);
		String str3 = String.valueOf(true);
		
		System.out.println("str1:" + str1);
		System.out.println("str2:" + str2);
		System.out.println("str3:" + str3);
		

		
		
		
	}

}

 

 

HTML, CSS 활용 1차 구현 

 

 

 

 

 

 

 

 

 

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-23 6일차  (0) 2023.05.23
2023-05-22 5일차  (0) 2023.05.22
2023-05-19 4일차  (0) 2023.05.19
2023-05-17 2일차  (0) 2023.05.17
2023-05-16 1일차  (0) 2023.05.16

자바 프로그램 개발 과정

1. 자바 소스파일 ( .java ) 텍스트파일 생성 

2. 자바언어로 코드 작성

3. 만들어진 소스파일 컴파일러인 javac 명령어로 컴파일

4. 컴파일이 성공하면 확장명이 (.class) 바이트 코드 파일 생성

 

바이트 코드 파일 실행 방법 

1. Package Explorer 뷰에서 소스파일 선택 후 툴 바에서 Run 아이콘 클릭

2. Package Explorer 뷰에서 소스파일 선택 후 마우스 오른쪽 버튼을 클릭한 후 [Run As] - [Java Application]

 

변수

작성 규칙 

1. 첫 번째 글자는 문자나 $, _ 이어야 하고 숫자로 시작 X

2. 영어 대소문자를 구분

3. 첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 ( 관례 )

4. 문자 수 길이의 제한은 없음

5. 자바 예약어는 사용할 수 없음

 

변수 사용

1. 하나의 값만 저장 가능 

2. 선언 시에 사용한 타입의 값만 저장 가능 

3. 변수는 변수가 선언된 중괄호 {} 안에서만 사용 가능하다.

4. 변수는 초기값이 저장되지 않은 상태에서는 읽을 수 없다.

 

컴파일 에러

sum = score1 + score2; ( 변수 score2가 초기화되지 않았기 때문에 읽을 수 없음 )

변수 초기화 후 사용해야됨

 

변수 사용 범위

선언 블록{}을 벗어 나면 안됨

 

 

 

 

기본 타입

정수 타입

byte : 1byte, -128 ~ 127

short : 2byte, -3만.. ~ 3만..

char : 2byte, 0~65535(유니코드)

int : 4byte, -21억~21억

long : 8byte, -9.2223...~ 9.2223.....

 

정수 리터럴

2진수 : 0b, 0B로 시작, 0과 1로 구성

8진수 : 0으로 시작, 0~7 숫자로 구성

10진수 : 소수점이 없는 0~9 숫자로 구성

16진수 : 0x, 0X로 시작, 0~9 숫자와 abcdef, ABCDEF로 구성 ( 10~15 알파벳 )

 

실습

 

package sec03.exam02;

import java.util.Scanner;

public class ScannerExample {

	public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String inputData;
        String inputNum;

        int deposit = 0; // 잔고

        while (deposit < 0) { // 잔액이 0보다 작거나 같을 때 계속 반복
            System.out.println("잔액이 부족합니다.");
            break; // 반복 후 종료
        }

        while (true) {
            System.out.println("원하시는 서비스를 입력 후 엔터를 쳐 주세요.");
            System.out.println("1.잔액조회");
            System.out.println("2.입금");
            System.out.println("3.출금");
            System.out.println("4.종료");
            System.out.print("입력>");

            inputData = scanner.nextLine().toUpperCase(); // 입력값을 대문자로 변환

            if (inputData.equals("4")) { // 입력값이 "Q"일 때 루프 종료
                break;
            }

            if (inputData.equals("2")) {
                System.out.print("입금>");
                inputNum = scanner.nextLine(); // 키보드 입력
                int tmp = Integer.parseInt(inputNum); // 정수로 변환
                deposit += tmp; // 잔고에 누적
                System.out.println("잔고: " + deposit); // 잔고 출력
            } else if (inputData.equals("3")) {
                System.out.print("출금>");
                inputNum = scanner.nextLine(); // 키보드 입력
                int tmp = Integer.parseInt(inputNum); // 정수로 변환
                deposit -= tmp; // 잔고에서 차감

                if (deposit < 0) {
                    System.out.println("잔고가 없습니다.");
                    deposit += tmp; // 출금한 금액을 다시 잔고에 더해줌
                } else {
                    System.out.println("잔고: " + deposit); // 잔고 출력
                }
            } else if (inputData.equals("1")) {
                if (deposit <= 0) {
                    System.out.println("잔고가 없습니다.");
                } else {
                    System.out.println("잔고: " + deposit); // 출력
                }
            }
        }

        System.out.println("종료");
    }
}

 

package sec03.exam01;

public class Hello {
	public static void main(String[] args) {
		int aa = 1000;
		
		System.out.println(aa);

	}

}

 

package sec03.exam01;

public class ScopeEx {

	public static void main(String[] args) {
		int v1 = 15;
		if(v1 > 10) {
			int v2;
			v2 = v1 - 10;
		}
//		int v3 = v1 + v2 + 5; v2 변수를 사용 할수 없기 때문에 컴파일 에러 발생 
				
	}

}

 

package sec03.exam01;

public class VarEx {
	public static void main(String[] ar) {
		int hour = 3;
		int minute = 5;
		
		System.out.println(hour + "시간" + minute + "분");

		int totalMinute = (hour*60) + minute;
		System.out.println("총" + totalMinute + "분");
	}
	
}

 

package sec03.exam01;

public class VariableExchangeExample {

	public static void main(String[] args) {
		int x = 3;
		int y = 5;
		System.out.println("x:" + x + ", y:" + y);
		
		int temp = x;
		x = y;
		y = temp;
		System.out.println("x:" + x + ", y:" + y);
	}

}

 

package sec03.exam02;

public class ByteExample {

	public static void main(String[] args) {
		byte var1 = -128;
		byte var2 = -30;
		byte var3 = -0;
		byte var4 = 30;
		byte var5 = 127;
//		byte var6 = 128; 컴파일 에러 127 넘어감
		
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var3);	
		System.out.println(var4);
		System.out.println(var5);
	}

}

 

package sec03.exam02;

public class IntegerLiteralExample {

	public static void main(String[] args) {
		int var1 = 0b1011; //2진수
		int var2 = 0206; // 8진수
		int var3 = 365; // 10진수
		int var4 = 0xB3; // 16진수

		System.out.println("var1: " + var1);
		System.out.println("var2: " + var2);
		System.out.println("var3: " + var3);
		System.out.println("var4: " + var4);
	}

}

 

package sec03.exam02;

public class RunStatementExample {

	public static void main(String[] args) {
		int x = 1;
		int y = 2;
		int result = x + y;
		System.out.println(result);

	}

}

 

 

카카오 Oven 체험   https://ovenapp.io/project/5VF2a3TVQm9e3DOo2zPqXgQOHcioIM0Q#mWJy5

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-05-23 6일차  (0) 2023.05.23
2023-05-22 5일차  (0) 2023.05.22
2023-05-19 4일차  (0) 2023.05.19
2023-05-18 3일차  (0) 2023.05.18
2023-05-16 1일차  (0) 2023.05.16

hashCode()

equals()를 오버라이딩하면, hashCode()도 오버라이딩해야 한다

결과가 true이니까 두 객체의 해시코드는 같아아야 하기때문에 

equals() 메소드와 함께 구현하여 객체의 동등성 비교에 사용

identity : 객체마다 다른 해시코드 반환 

 

toString(), toString()의 오버라이딩

 

 

 

Object클래스와 equals()

 

 

 

equals( Object obj )

 

 

 

 

 

String클래스 문자열 비교, 빈 문자열, String 생성자

 

 

 

 

.

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

예외 처리  (0) 2023.04.03
내부클래스, 익명클래스  (0) 2023.03.30
객체지향 프로그래밍 II  (0) 2023.03.27
객체지향 프로그래밍 I  (0) 2023.03.15
배열  (0) 2023.03.08

+ Recent posts