관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch2 - 14 ~ 16 [scanner(화면에서입력받기),정수형의오버플로우] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch2 - 14 ~ 16 [scanner(화면에서입력받기),정수형의오버플로우]

소소한나구리 2023. 11. 2. 17:41

1) Scanner

(1) 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스

  1. import문 추가
    • import java.util.*;
  2. Scanner객체의 생성
    • Scanner scanner = new Scanner(System.in);
    • System.in : 화면입력
  3. Scanner객체를 사용
    • int num = scanner.nextInt();
    • 화면에서 입력받은 정수를 num에 저장
    • 실수로 저장할 경우 nextFloat()
  4. 라인으로 입력 받기
    • String input = scanner.nextLine();  // 화면에서 입력받은 내용을 input에 저장 (nextLine = 한행)
    • int num = Integer.parseInt(input);  // 문자열(input)을 숫자(num)로 변환
    • 위의 두 문장은 맨위의 int num = scanner.nextInt();와 같음
    • 한 라인에 여러가지 값을 입력 받는 경우 nextLine으로 읽어 온 후 값을 나눠서 처리해야할 경우가 있어 상황에 따라 응용.

(2) 숫자 < - > 문자열 변환 방법

  • 숫자 -> 문자열 = 숫자 + ""
  • 문자열 -> 숫자 = Integer.parseInt(input)

(3) 실습

import java.util.Scanner;
// 1. import문 입력, impotr java.util.*; 이라고 해도 됨

public class ScanfEx1 {
	

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in); // 2. Scanner클래스의 객체 생성
		
		int num = scanner.nextInt();
		int num2 = scanner.nextInt();
		System.out.println(num); // 화면에 입력된 값을 출력
		System.out.println(num2); // 연속적으로 화면에 입력된 값을 출력
		
		String input = scanner.nextLine(); // 라인단위로 입력
//		값이 여러개 있거나 숫자나 문자열 실수 등이 섞여있을 때 사용
		
		int num3 = Integer.parseInt(input);	// 문자열을 int타입으로 변환
		System.out.println(num3);
	}
}

2) 정수형의 오버플로우

(1) 오버플로우 : 표현할 수 있는 범위를 넘어선 경우

  • 최대값 + 1 = 최소값
  • 최소값 - 1 = 최대값

 

                                                       10진수                                                                                                          2진수

 

 

                                                     부호없는 정수                                                                                            부호 있는 정수

예제

class Ex2_11 {
	public static void main(String[] args) {
		short sMin = -32768,  sMax = 32767;
		char  cMin = 0,       cMax = 65535;

		System.out.println("sMin  = " + sMin);
		System.out.println("sMin-1= " + (short)(sMin-1));
		System.out.println("sMax  = " + sMax);
		System.out.println("sMax+1= " + (short)(sMax+1));
		System.out.println("cMin  = " + (int)cMin);
		System.out.println("cMin-1= " + (int)--cMin);
		System.out.println("cMax  = " + (int)cMax);
		System.out.println("cMax+1= " + (int)++cMax);
	}
}

결과
sMin = -32768
sMin-1= 32767
sMax = 32767
sMax+1= -32768
cMin =0
cMin-1= 65535
cMax = 65535
cMax+1= 0
 
 

(2) 부호있는 정수와 부호없는 정수의 범위

  •  n bit 의 표현할 수 있는 값의 범위
    • 부호가 없는 경우: 0 ~ 2^n -1
    • 부호가 있는 경우: -2^(n-1) ~ 2^(n-1) -1
16비트의 표현 정수의 개수 예시

 

10진수

  • 0 ~ 9 = 0 ~ 10-1
  • 0 ~ 99 = 0 ~ 100-1 = 0 ~ 10^2 -1
  • 0 ~ 999 = 0 ~ 100-1 = 0 ~ 10^3-1
  • 0 ~ 9999 = 0 ~ 1000-1 = 0 ~ 10^4-1

2진수

  • 0 ~ 1 = 0 ~ 2-1
  • 0 ~ 11 = 0 ~ 3 = 0 ~ 2^-1
  • 0 ~ 111 = 0 ~ 7 = 0 ~ 2^3-1
  • 0 ~ 1111 = 0 ~ 15 = 0 ~ 2^4-1

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의