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));
}
}
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 방향키 위/아래: 라인 복사
}
}
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); //안녕? 반가워! 밥먹자
}
}
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); //안녕? 반가워! 밥먹자
}
}
-next(): 한 단어(띄어쓰기, 엔터를 만나면 입력 종료)
-nextLine(): 한 문장(엔터를 만나면 입력 종료)
스캐너 입력 버퍼와 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("종료");
}
}
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("종료");
}
}
변수 재사용 시 띄어쓰기" " 추가하기