개발/교육

(Java) 2일차

kakk789 2022. 3. 29. 09:45

주석문

프로그램 실행에 영향을 끼치지 않으며 설명하기 위한 문장
프로그램에 오류가 있을 때에 오류를 해결하기 위하여 의심스러운 부분을 주석으로 처리해가면서 오류를 해결할 수 있음
//       -->  한줄 주석
/* */    --> 여러줄 주석

범위 주석 방법

ctrl + shift + c   --> 블록 범위를 한번에 주석
ctrl + /             --> 블록 범위를 한번에 주석

변수와 상수

ex ) int a = 10

변수

  • 변할 수 있는 값
  • 변수 a에 10을 선언했다가 5를 선언 가능

결과값

상수

  • 고정된 값
  • 예를들어 10=5 불가능

두 변수의 값 바꾸기

temp 임시변수 선언하여 값을 저장하여 temp에 저장하는 방식을 사용함
-- 형식 --
int temp;

temp = a;
a=b;
b = temp;
public class SwapTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int a = 17;
		int b = 24;
		
		System.out.println("a: "+ a);
		System.out.println("b: "+ b);
		
		int temp;
		temp = a;
		a=b;
		b = temp;
		System.out.println("a: "+ a);
		System.out.println("b: "+ b);
	}

}

Boolean

나이가 20살 이상일 경우 true를 출력하라.
flags = true == age >= 20;
flags = age >=20;

if문 대신 이런 식으로 표현해도 됌.
import java.util.Scanner;

public class BooleanTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		boolean flags;
		Scanner sc = new Scanner(System.in);
		
		int age = sc.nextInt();
		
		flags = age >=20;
		
		System.out.println(flags);
	}
}

char 

하나의 문자를 표현하기 위한 자료형
'홋' 따옴표 로 묶어줘야함
		char a = '홍';         //한글자 홋 따옴표 
		String b = "홍길동";   //여러글자 쌍 따옴표
		String c = "홍";       // 한글자 쌍 따옴표
		
		System.out.println(a);  // 홍
		System.out.println(b);  // 홍길동
		System.out.println(c);  // 홍

번외) String에서 한 바이트 반환하기(charAt)

		String data = "hello";
		char first = data.charAt(0); // char 로 저장해야함
		System.out.println(first);   // char 형의 h 한글자 반환

OverFlow, UnderFlow

  • 1번. OverFlow가 되는 이유는 바이트가 표현할 수 있는 양의 정수는 127까지인데 거기에 1을 더하니까 오버플로우 되어 -128이 출력 됨
  • 2번. UnderFlow가 발생하는 이유는 바이트가 표현할 수 있는 음의 정수는 -128 까지인데 거기에 1을 빼니까 언더플로우 되어 +127이 됨.
        // 1번. OverFlow
        byte a = 127;
		a= (byte)(a+1);
		System.out.println(a);  // -128 출력
		
        // 2번. UnderFlow
		byte b = -128;
		b= (byte)(b-1);
		System.out.println(b);  // +127 출력

+127에서 1을 더하면 -128이 된다.

서로 다른 자료형을 연산을 하면 자료형이 큰 것으로 연산이 됨.

예시 ) int (4) + double(8)
        ==> double(8)
		int a=5;
		int b=2;
        
		double r = a / b;
		System.out.println(r); // 결과 값 2.0 (비정상)
        
		double r2 = a / (double)b;  // 하나라도 double로 형변환 해야함
		System.out.println(r2);   // 결과 값 2.5 (정상)

비트 연산자

&  비트곱 - AND 연산 - 둘 다 1이면 1 ( 곱하기 개념으로 이해 = 둘이 1*1=1 임 )           
|    비트합 - OR 연산 - 하나 라도 1이면 1 ( 더하기 개념으로 이해 = 0+1= 1 임) 
^   비트차 - XOR 연산 - 같으면 0 다르면 1 ( 빼기 개념으로 이해 = 1 - 0 = 1)

비트 곱( & )과, 비트 합( | )은 논리 연산자로도 사용 가능.

		if(age >=30 & height<=160) // && 이 아닌 &만 해도 가능함

ShortCut Operation

위에서 설명 했듯이 비트 곱( & ) 과, 비트 합( | )은 논리 연산자로 사용이 가능하다.
그렇다면 && 과 & 의 차이점은 무엇일까? 결과는 비슷하나 원리가 다름

if ( 조건식 1 && 조건식 2 )
  • &&은 조건식 1이 거짓이라면 조건식 2를 수행하지 않음
  • 그래서 &&, || 를 Shortcut Operation 이라고 함.
만약 if ( 조건식 1 & 조건식 2 ) 일 경우
  • & 가 논리연산자로 사용될 때는 조건식 1이 거짓이라도 일단 조건식 2도 실행함.
  • 즉, 조건식1, 2번 모두 다 실행 해야함.
  • 실행하는게 무슨 의미가 있는거냐면, 만약 조건식에 전위연산, 후위연산이 있을 경우 문제가 될 수도 있음.

아래 예시 코드를 확인해보자

		int a, b, c, d;
		a=b=c=d=5;
		
		if(++c > 100 & ++d > 100) {
			System.out.println("OK"); }
		else {
			System.out.println("NO"); }	
		System.out.println("c: "+c); // 출력 값: 6
		System.out.println("d: "+d); // 출력 값: 6
		
	//---------------------------------------------------------
    
		if (++a > 100 && ++b > 100) {
			
			System.out.println("OK"); }
		else {
			System.out.println("NO"); }
		
		System.out.println("a: "+a); // 출력 값: 6
		System.out.println("b: "+b); // 출력 값: 5

해당 두 코드는 모두 "NO"를 출력한다.

하지만 c, d = 모두 6이 출력 되었지만 a, b는 각각 6, 5가 출력되었다.

  • c는 전위 연산으로 우선 6으로 증가 되었고, 해당 조건식 1번은 거짓이지만 &를 논리연산으로 사용한다면 뒤에 조건식 2번을 무조건 실행하기 때문에 d도 전위 연산 실행되므로 모두 6이된다
  • 하지만 a, b는 다르다. 각각 6, 5 가 출력된다.
    a는 우선 전위 연산 실행하면 6이 되지만 해당 조건식 1번 자체가 거짓이므로 두번째 조건식이 실행되지 않는다. 두번째 조건문이 실행되지 않으니 당연히 b도 전위연산을 할 수가 없으므로 각각 6, 5가 출력 된다

시프트 연산자

<<  의미:  *2 한 것과 같음 ( 3비트 레프트 시프트 == 곱하기 8 를 의미)
>>  의미:  /2 한 것과 같음 ( 2비트 라이트 시프트 == 나누기 4 를 의미)
		int i = 8;
		
		int a = i << 1;
		int b = i >> 1; 
		
		System.out.println(a);  // 16
		System.out.println(b);  // 4

상기 코드설명

  • 8 = 2진수로 0000 1000
  • a = 왼쪽으로 1비트 만큼 시프트 하므로 0001 0000 즉, 16이 됨
  • b = 오른쪽으로 1비트 만큼 시프트 하므로 0000 0100 즉, 4가 됨

삼항 연산자(조건식 연산자)

조건식에 따라 동작시킬 항을 선택하기 위한 연산자.
간단한 if, else를 대신할 수 있음.
사용법 설명
(항1) ? 항2 : 항3
- 항1 =  조건식(참, 거짓)
- 항2  = 항 1이 참 일 경우 항2 동작
- 항3 = 항1 이 거짓 일 경우 항3 동작

항2와 항3에는 변수, 상수, 수식이 올 수 있음.
		int a = 5; 
		
		//방법 1
		int b = (a>0)?1:0;
		System.out.println(b);
		
		//방법 2
		String c = (a>0)?"OK":"NO";
		System.out.println(c);
		
		//방법 3
		System.out.println( (a>0)?"OK":"NO") ;

제어문

프로그램 실행 중에 실행할 문장을 제어하기 위한 문장을 말한다
선택문, 반복문, break, continue 가 있음.

선택문

if, switch 문이 존재

중첩 if문 활용도

- 3개 중 큰 수 찾기할 때 중첩 if문 활용

		Scanner sc = new Scanner(System.in);
		System.out.println("3개의 정수를 입력>> ");
		int n1 = sc.nextInt();
		int n2 = sc.nextInt();
		int n3 = sc.nextInt();
		
		int max=0;
		
		if (n1>n2) {
			
			if(n1>n3) {
				max=n1;	
			}
			else {
				max=n3;	
			}
		}
		else {
			if(n2>n3) {
				max=n2;
			}
			else {
				max=n3;	
			}
		}
		System.out.println("가장 큰 수는"+max+"입니다.");

 

반응형