본문 바로가기
개발자로 가는 길(국비지원과정)/1. Java

[자바복습 Day02] 스택, 힙, 자바의 연산자(삼항연산자, 논리연산자), buffer를 지우기 위해 nextLine()을 사용, if문, white space

by 레아Leah 2021. 12. 28.
반응형

기초자료형은 stack에 저장, 
참조자료형(ex String)은 데이터는 다른 곳에 있지만 위치의 주소만 힙 heap 영역 저장된다.

String str = "가";

str은 heap 영역에 저장됨

 

*참조자료형 : 다른 영역에 참조되는 데이터를 가짐 

 

초기화은 처음에 변수에 값을 대입하는 것, 대입(assignment)은 초기화 이후 값을 넣는 것을 말한다. 

연산은 메모리에서 하지 않고, 연산장치 CPU에서 함 

 

나머지 연산자%는 피연산자가 반드시 정수여야만 한다. 실수도 가능하지만 가능한 맞는지 확인하는 것이 좋다. 

 

<논리연산자>

: 그리고, 이거나 

: &&(and), ||(or) 

: &&(and) 특정 값이 범위에 들어가 있는 것을 확인할 때 사용 

 

자바에서는 10 < X < 20으로 사용할 수 없고, => 파이썬에서는 사용 가능

(X >10) && (X < 20)라고 사용해야 한다. 

 

//나누기 연산시 주의, 하나의 값이 실수형이냐 정수형이냐에 따라 값이 다르게 나오기 때문에 
System.out.println(10*2-3.0/5);
System.out.println(10*2-3/5);
System.out.println(3.0/5);

 

<비교연산자>

: 값이 boolean으로 나옴 

 

<삼항연산자> 

: 자바에 딱 한 개밖에 없음 

: 피연산자가 3개 있음 

: 변수 = (조건식) ? 참일 경우 사용할 식1 : 거짓일 경우 사용할 식2; 

 

<증감연산자>

: ++, -- 

: 변수에만 사용 가능, 1 증가 혹은 감소  

a++, ++a,

a--; 최하위

--a; 1순위

 

char는 연산의 일부만 낄 수 있다. 문자를 저장하기 위한 타입이기 때문에 음수가 존재하지 않다. 

 

 

LV = RV 대입연산자 
LV : 변수여야야함, RV : 변수, 값, 식 
RV는 LV보다 타입이 작거나 같아야 한다. 

 

 

/* ctrl + shift +/ 주석을 할 때
 * int a; int b = 10;
 * 
 * a = b;
 */ ctrl + shift +\ 주석을 풀 때 

 

 

<복합 대입연산자>

a = a +10; // a +=10; 

a = a - 5;  //  a -=5; 

 

a = a > 10; 

: 비교연산자는 값이 boolean 타입이기 때문에 int형인 a에 들어가지 않는다. 

 

a >= 10;은 문장이 완성되지 않았기 때문에 오류 

boolean bool = a >=10;는 완성된 문장 

 

true + false는 자바에서 불가능하지만 C언어와 파이썬, JS에서 가능 !  

 

z = -z; 부호 반전 

z = +z; 부호 유지 

 

 

<캐스팅과 프로모션 Casting, Promotion>

Promotion: 연산을 실시할 때 두 피연산자의 타입이 다를 경우, 큰 타입으로 타입을 맞춘 후 연산을 실시   

Casting: 사용자가 강제로 타입을 바꿀 경우, 연산자 우선순위 1순위  

            int area = (int)(10*10*3.14); 

 

 

<표준입력장치>

System.out : 모니터(출력) : Standard Input Output ==> studio

System.in : 키보드(입력)

Scanner라는 객체를 사용해 키보드를 통해 입력을 받는다. Scanner는int처럼 하나의 타입이다.  

 

sc.next();는 한단어만 입력 받음 ! (뛰어쓰기, 엔터, 탭은 입력불가) 

sc.nextLine();은 (뛰어쓰기, 엔터, 탭은 입력 가능), buffer에 있는 tab, enter를 버리지 않음 

Line이라는 것때문에 버리지 못하는 거임. 찌꺼기 엔터가 남아있다고 생각하면 됨. 

next, nextInt();, nextDouble();는 buffer에 있는 tab, enter를 버림

nextLine이 다음에 오는 것이 아니라면 문제될 게 없당 ! 

 

=> 해결책 찌꺼기 처리반 nextLine();을 하나 가져다 두는 것이다. 

 sc.nextLine(); //찌꺼기 처리, buffer를 비움

 

 

<+연산자>

두가지 이상의 역할을 수행하는 연산자 

단항 연산자 : 부호 유지

이항 연산자 : ①덧셈, (피연산자가 문자열일 경우,) ②대상이 되는 다른 데이터도 문자열로 만들어 결합 

 

<-연산자>

단항 : 부호반전

이항 : 뺄셈

 

문자열과 숫자는 연산이 되지 않아 오류가 발생한다. 괄호( )를 사용해주면 okay ! 

 

 

<if문>

V1

V2

V3 

3가지의 버전이 있음

 

 

white space : tab , enter, space를 무시하고 가져오지 않는 함수가 nextInt, nextDouble, next이다.

nextInt, nextDouble, next는 space / space ==> space를 무시하고 연산자, 문자열만 가져간다. 

 

white space 기능이 없는 것은 nextLine() 버퍼 안에 엔터를 무시하지 못하고 다 긁어오는 함수이다.  

버퍼에 남아있는 엔터를 값인 줄 알고 읽어들임! 

 

nextLine()를 사용할 경우 

10 enter /  연산자에 enter를 가지고 가서 밀림. 그래서 문제 발생. Day04 

 

enter를 누르지 않으면 buffer에 있는 메모리가 변수에 들어가지 않음. 

 

nextLine()는 버퍼때문에 함부로 사용하면 안된다. 

 

 

 

 

반응형