JAVA/JAVA수업

#3. 입력값 출력(Scanner), 형변환, 연산자

열하나요 2023. 7. 5. 09:26

3.1 입력값 출력하기 (Scanner 클래스)

자바에서 이미 제공하고 있는 Scanner 클래스 사용

클래스 Scanner 호출 (package와 class 사이 작성)

sc라는 변수로 새로운 Scanner클래스 생성

daklfqka;avkwkganslb.

여기까지가 준비 끝.

 

먼저, 입력받고자 하는 내용을 먼저 질문해서 입력을 유도한다.

next() 라는 메소드에 변수를 대입해준다.

출력값

Console창에 홍길동은 직접입력하고 Enter를 누르면 입력값이 출력된다.

 

next() : 문자열 사용 (사용자가 입력한 값 중 공백이 있을 경우 공백문자 이전까지만 입력받음)

nextInt(), nextDouble() : 정수나 실수 사용

nextLine() : 문자열 (사용자가 입력한 값 중 공백과 무관하게 한 문장을 다 읽어옴. 개행문자를 만나기 전까지/

버퍼에서 개행문자 이전까지의 모든 값을 가져온 후 "개행문자"를 비워주는 역할)

 

Scanner라는 클래스를 사용해서 입력값을 출력할 수 있다! 근데 Scanner는 외부클래스이므로 호출해서 "new"로 새롭게 생성해주어야 한다!

 

3.2  형변환

자바에서 값을 처리하는 규칙
 
 1. =(대입연산자)를 기준으로 왼쪽, 오른쪽이 같은 자료형이어야 한다.
 => 같은 자료형에 해당하는 리터럴값만 대입할 수 있음
 => 자료형이 다를 경우? == 값을 바꿔서 대입해야함
  
 2. 같은 자료형들끼리만 연산이 가능함
 => 자료형이 다른데 연산이 하고싶다?? 둘 중 하나를 "형변환"해서 나머지 하나와 동일하게 만들어야함 
  
 3. 연산의 결과물도 같은 자료형이어야 한다.
 ex) 1 + 1 = 2(정수), 1.1 + 1.1 + = 2.2(실수) 

 

형변환의 종류

1. 자동형변환(Promotion) : 자동으로 형변환이 진행됨 (작은 크기의 자료형 -> 큰 크기의 자료형)

 1-1. int(4Byte, 정수) -> double(8Byte, 실수)

 1-2. int(4yte, 정수) -> long(8Byte, 정수)

 1-3. long(8Byte, 정수) -> float(4Byte, 실수) ; 특이케이스. 정수가 실수에 담길 때 큰 사이즈의 정수가 작은 사이즈의 실수자료형에 대입될 수 있음

 1-4. char(2Byte) <-> int(4Byte)  ;상호작용. 서로 자동 형변환 됨

int가 char보다 크기 때문에, char가 int로 변환되어 연산값 출력됨(char는 연산할 때 무조건 int로 바꿈)즉, 결과값은 int형 => CPU가 값을 처리하는 기본크기가 int형 크기(4Byte)

String은 class이다. 모든 자료형은 String과 연산될때 String으로 변경후 출력된다.

 

비교연산자( == ) : 좌항과 우항의 값을 비교해서 결과값을 반환 (true, false)

2. 강제형변환/명시적 형변환(Type Casting) : 자동형변환이 이루어지지 않은 경우에 진행

 2-1. double(8Byte, 실수) -> float(4Byte, 실수)

 2-2. double(8Byte) -> int(4Byte)

Type Casting은 기본형에서만 할 수 있음 

3.3 연산자

#산술연산자

1. 덧셈(+)

묶지 않고 연산하면 String(문자열)로 인식하기 때문에  결과값이 다르게 나온다

 

2. 뺄셈(-)

뺄셈의 경우 괄호로 묶지 않으면 문자열과 num1을 하나로 묶은 뒤 정수를 빼기 때문에 빨간줄이 생김

 

3. 곱셈, 나눗셈, 모듈러(%)

4. 특이케이스 (0으로 나누면 오류가 난다 : by zero)

 

예제.  변준식의 나눔 프로젝트

문제)
// 메소드명 : presentToStudent()

// 입력받을 값 : 1. 신청 인원 수 
//  2. 선물 개수

// 1인당 가질 수 있는 선물의 개수 : 선물 개수 / 신청 인원 수
// 남은 선물의 수 : 선물 개수 % 신청 인원 수

// 출력 형식
// 신청 인원 당 받을 수 있는 선물의 개수 : X개
// 남는 선물의 개수 : X개

 

답)

 

※헷갈리지만 중요한 것.

외부클래스, 메소드 불러오기

main() 메소드가 있는 클래스에 "import 패키지명.클래스명;" : 외부클래스 불러오기

main() 메소드에 "클래스명 별명 = new 클래스명();"  : 외부클래스 생성하기

main() 메소드에 "변수명.메소드명();" : 외부클래스 메소드 실행하기

 

#증감연산자

단항연산자로서 한 번에 1씩 증가(더하거나) 감소(빼거나)하는 연산을 한다.

연산자의 위치
 * 전위 연산 : ++값. --값                  --> 먼저 값을 증가시키고 그 값을 처리
 * 후위 연산 : 값++, 값--                  --> 값을 처리하고나서 증가하거나 감소하겠다

 

후위 연산 먼저.

헷갈릴 수 있다.

전위 연산.

 

#복합 대입 연산자

자기 자신과 해당 산술 연산을 한 뒤 그 결과를 자기자신에게 다시 대입하는 용도

 

#논리 부정 연산자

논리값(true, false)를 반대로 바꿔주는 연산자

#비교 연산자(관계 연산자)

두 개의 값을 가지고 비교, 이항 연산자

1. 동등비교 : 일치함을 비교( =, != )

2. 대소비교 : 크고 작음을 비교 ( <, >, <=, >= )

 

#논리 연산자

두 개의 논리값을 연산하는 연산자

1. AND 연산자 : 논리값 && 논리값
  좌항과 우항의 값이 모두 true여야만 최종 결과 true

2. OR 연산자 : 논리값 || 논리값
  좌항과 우항의 값 중 하나라도 true이면 최종 결과 true