국비 3-2

냐아암·2023년 4월 18일
0

국비

목록 보기
5/114
  • Scanner class: 사용자로부터 입력되는 정수, 실수, 문자열을 처리하는 클래스
  • 키보드 입력값 받기
    -정수: sc.nextInt();
    -실수: sc.nextDouble();
    -문자열: sc.next(); , sc.nextLine();
  • import 단축키: ctrl shift O
  • System.out.println 단축키: syso ctrl space

1. sc.nextInt();

package edu.kh.variable.ex2;

//import: 다른 패키지에 존재하는 클래스를 얻어오는 구문
import java.util.Scanner;

public class ScannerExample1 {
	public static void main(String[] args) {
		//Scanner: 프로그램 실행 중 키보드 입력을 받을 수 있게 하는 역할
		
		//Scanner 생성
		//-> 프로그램 안에 스캐너라는 기계를 만드는 것
		Scanner sc = new Scanner(System.in);
		//오류 원인: 설계도(class)가 없어서 못 만듦 --> import구문 작성
		
		System.out.print("정수1 입력: ");
		int input1 = sc.nextInt(); //입력 받은 정수를 input1에 대입
		//nextInt(): 다음 입력된 정수를 읽어온다. (키보드로 입력된 정수)
		
		System.out.print("정수2 입력: ");
		int input2= sc.nextInt();
		
		System.out.printf("%d + %d = %d\n", input1, input2, (input1+input2));
	}

}

2. sc.nextDouble();

package edu.kh.variable.ex2;

import java.util.Scanner;

public class ScannerExample2 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		//사칙연산 계산기: 두 실수를 입력받아 사칙연산 결과를 모두 출력
		System.out.print("실수1 입력: ");
		double input1 = sc.nextDouble();
		System.out.print("실수2 입력: ");
		double input2 = sc.nextDouble();
		//nextDouble: 입력 받은 다음 실수를 읽어온다.
		
		System.out.printf("%.2f + %.2f = %.2f\n", input1, input2, (input1 + input2));
		System.out.printf("%.2f - %.2f = %.2f\n", input1, input2, (input1 - input2));
		System.out.printf("%.2f * %.2f = %.2f\n", input1, input2, (input1 * input2));
		System.out.printf("%.2f / %.2f = %.2f\n", input1, input2, (input1 / input2));
		/* 결과
		실수1 입력: 11.0
		실수2 입력: 1.5
		11.00 + 1.50 = 12.50
		11.00 - 1.50 = 9.50
		11.00 * 1.50 = 16.50
		11.00 / 1.50 = 7.33

		 */
		
		//단축키: ctrl alt 방향키 위/아래: 라인 복사
	}

}

3. sc.next();

package edu.kh.variable.ex2;

import java.util.Scanner;

public class ScannerExample3 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		//문자열(String) 입력
		//문자열 3번 입력 받아 한 줄로 출력하기
		System.out.print("입력1: ");
		String input1 = sc.next(); ////next(): 다음 입력된 한 단어를 읽어옴
		System.out.print("입력2: ");
		String input2 = sc.next();
		System.out.print("입력3: ");
		String input3 = sc.next();
		
		System.out.printf("%s? %s! %s", input1, input2, input3); //안녕? 반가워! 밥먹자
		

	}

}

4. sc.next();_하나의 변수만 사용

package edu.kh.variable.ex2;

import java.util.Scanner;  // 단축키: ctrl shift O

public class ScannerExample4 {

	public static void main(String[] args) {
		
		//하나의 변수만 사용 --> 누적효과 (변수의 재사용성)
		
		Scanner sc = new Scanner(System.in);
		System.out.print("입력1: ");
		String input = sc.next() + " "; //띄어쓰기 추가
						//안녕_
		System.out.println(input);
		System.out.print("입력2: ");
		input = input + sc.next() + " "; //위의 값 대입 (누적)
		//대입 연산자(=): 오른쪽에 작성된 값을 왼쪽 변수에 대입
		System.out.println(input); //안녕 반가워 
		System.out.print("입력3: ");
		input = input + sc.next() + " "; //위의 값 대입
		System.out.println(input); //안녕? 반가워! 밥먹자
	}

}

5. sc.nextLine();

  1. -next(): 한 단어(띄어쓰기, 엔터를 만나면 입력 종료)
    -nextLine(): 한 문장(엔터를 만나면 입력 종료)

  2. 스캐너 입력 버퍼와 nextXXX 의미
    입력 -> 입력 버퍼에 저장 -> nextXXX()통해 버퍼 내용 읽어옴
    입력 버퍼 nextXXX() 후처리
    nextLine(): hello world (엔터) -> hello world(엔터) -> 엔터 제거
    nextInt(): 100(엔터) -> 100
    -->next(), nextDouble(), nextInt()등 모두 입력 버퍼에서 엔터 제외하고 내용만 읽어옴

    *next();, nextInt();, nextDouble(); 등을 사용 후 바로 nextLine();을 사용하면 문제점 발생 --> 버퍼 비우기 ( sc.nextLine(); )을 통해 문제점 해결

package edu.kh.variable.ex2;

import java.util.Scanner;

public class ScannerExample5 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
        //1번
		System.out.print("입력: "); //Hello World
		String str1 = sc.next(); 
		String str2 = sc.nextLine(); 
		
		System.out.println(str1); //Hello
        System.out.println(str2); //Hello World
		
		//2번
		System.out.println("--------------------------------------");
		System.out.print("nextInt(): "); //입력버퍼: [100엔터]
		int a = sc.nextInt(); 
		//100   //입력버퍼: [(엔터)]
		
		//문제점: nextInt 이후 입력버퍼에 남아있는 [엔터] 때문에 다음 nextLine 수행 시
		//버퍼에 남아있는 [엔터]를 읽어버리기 때문에 추가 입력을 시도하지 못하고 다음 코드로 넘어감
		
		//해결법: 입력을 위한 nextLine() 수행 전 입력버퍼에서 [엔터] 제거
		//-> 빈 공간에 sc.nextLine() 구문 작성
		
		sc.nextLine(); //버퍼 비우기
		
		System.out.print("nextLine(): ");//입력버퍼: [a, b, c]
		String s = sc.nextLine();
		System.out.println("종료");
		

	}

}

참고 (5번과 유사)

package edu.kh.variable.ex2;

import java.util.Scanner;

public class ScannerSelf {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("nextLine(): ");
		String s = sc.nextLine();
		
//		sc.nextLine();
		
		System.out.print("nextLine(): "); 
		String a = sc.nextLine(); 
		System.out.println("종료");

	}

}

변수 재사용 시 띄어쓰기" " 추가하기

profile
개발 일지

0개의 댓글