2020년 10월 08일
업데이트:
Scanner로 여러가지 타입 입력받기
import java.util.Scanner;
(생략)
Scanner sc = new Scanner(System.in);
//정수 입력받기
int num = sc.nextInt();
//실수 입력받기
float Float = sc.nextFloat();
double Double = sc.nextDouble(); // double이 실수의 기본형이므로 double을 주로 사용함
//문자열 입력받기
String st = sc.next(); //띄어쓰기나 엔터 전까지의 문자열만 대입
String st2 = sc.nextLine(); //엔터 전까지의 문자열만 대입
//문자 입력받기
//char형은 따로 nextChar()와 같은 메소드가 없다.
char ch = sc.next().charAt(0);
Scanner의 문제점
nextLine()의 경우 \n
인 개행문자 전까지만 입력받은 문자열을 변수에 대입한다. 그래서 nextInt()나 nextDouble()과 같이 사용할 때 문제가 나타날 수 있다.
(생략)
int num = sc.nextInt();
String st = sc.nextLine();
//출력
//123
정수형으로 입력받은 후 버퍼에 숫자를 제외한 \n
이 남아있기 때문에 문자열을 입력받지 않고 123만 입력받고 프로그램이 끝나버린다. 이럴경우 해결 방법은 다음과 같이 추가로 코드를 넣어주면 된다.
int num = sc.nextInt();
sc.nextLine(); // \n 제거
String st = sc.nextLine();
형변환(casting)
자동 형변환
컴파일러가 자동으로 값의 범위
가 작은 자료형을 값의 범위가 큰 자료형으로 변환한다.
int num = 100;
double Double = 123.5;
System.out.println(num + Double);
//출력 결과
//223.5
/*자동형변환 과정
1. int형인 num 안의 값을 double로 형변환한다.
num = 100.0
2. 형변환 된 num과 Double의 값을 더한다.
100.0 + 123.5
* 이 모든 과정은 컴파일러가 자동으로 변환해준다.
*/
강제 형변환
강제 형변환은 자동 형변환과는 다르게 값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환한다. 다만, 강제 형변환 시 데이터 손실이 발생할 수 있으니 유의해야 한다.
//double -> int
//소수점 부분은 버리고 정수 부분만 가져온다.
int num = 100;
double Double = 123.1;
System.out.println(num + (int)Double); // 223
//byte, short 자료형 연산 시 유의할 점
byte num1 = 1;
byte num2 = 2;
// byte num3 = num1 + num2; -> 에러!
// num1, num2에 저장된 값이 int의 리터럴 표기법이기 때문에 다음과 같이 작성해야한다.
byte num3 = (byte)(num1 + num2);
Overflow
오버플로우는 데이터 연산 처리 시 자료형의 값의 범위를 초과하는 경우에 발생한다.
그림_C언어코딩도장
//byte의 값의 범위는 -128 ~ 127
byte num1 = 127;
byte num2 = (byte)(num1 + 1);
byte num3 = -128;
byte num4 = (byte)(num3 - 1);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
/* 출력
127
-128
-128
127
*/
// 최대값 초과 시 -> 최소값
// 최소값 초과 시 -> 최대값
연산자
연산자 우선순위
논리 부정 연산자
//논리 부정 연산자
boolean bl = true;
System.out.println(!bl); //false
// true -> flase
// false -> true
증감 연산자
- 전위 연산자 : 전위 연산자의 경우 먼저 증감 연산 실행 후 다른 연산을 실행
- 후위 연산자 : 후위 연산자의 경우 다른 연산 먼저 실행 후 증감 연산 실행
int num = 10;
num--;
System.out.println(num); //9
--num;
System.out.println(num); //8
// 단항 연산일 경우 전위, 후위 상관 없음(조건문 제외)
// 후위 연산자
int num = 10;
System.out.println(num++);
System.out.println(num++);
System.out.println(num++);
System.out.println(num++);
System.out.println(num++);
System.out.println("num : " + num);
/* 출력
10
11
12
13
14
num : 15
*/
// 전위 연산자
int num = 10;
System.out.println(++num);
System.out.println(++num);
System.out.println(++num);
System.out.println(++num);
System.out.println(++num);
System.out.println("num : " + num);
/*
11
12
13
14
15
num : 15
*/
댓글남기기