사용자에게 키보드로 값을 입력받는 방법
자바에서 java.util.Scanner클래스를 만들어놓음
Scanner클래스 안에 이미 만들어져있는 메소드들을 호출하면 사용가능
Scanner sc = new Scanner(System.in); // System.in => 입력받은 값을 바이트단위로 받아들이겠다.
- next() : 사용자가 입력한 값 중 공백이 있을 경우 공백 이전까지의 값만 가져옴
- nextLine() : 사용자가 입력한 모든 값을 읽어옴 (공백까지도),
버퍼에서 "엔터" 이전까지의 모든 값을 가져온 후 "엔터"를 비워주는 역할- 그 외의 메소드 : 버퍼에서 "엔터" 이전까지의 값을 가져온 후 "엔터"를 비워주지 않음
해결방법 : sc.nextLine()이 수행되기 전에 버퍼에 남아있는 "엔터"를 깔끔히 비우기- 문자열을 입력받을 때 : sc.nextLine()
- 정수값을 입력받을 때 : sc.nextInt()
- 실수값을 입력받을 때 : sc.nextDouble()
- char gender = sc.nextChar(); // nextChar()와 같은 메소드 없음!!
sc.nextLine()으로 문자열로 먼저 읽어들이고
=> charAt(0)을 이용해서 0번 인덱스 자리의 문자 뽑기
1. 모니터로 어떠한 값을 "출력"하기 위해서 : System.out.print/println()
2. 키보드로 어떠한 값을 "입력"하기 위해서 : Scanner sc = new Scanner(System.in);
sc.nextLine() : 문자열 읽어들이기
sc.nextInt() : 정수값 읽어들이기
sc.nextDouble() : 실수값 읽어들이기
sc.nextLine().charAt(0) : 문자값 읽어들이기
[주의사항]
nextInt() / nextDouble() 뒤에 nextLine()이 와야될 경우
=> nextLine()을 한번 더 써줘서 버퍼에 남은 "엔터"를 비워주는 과정 필요!
package com.br.variable;
import java.util.Scanner;
public class B_KeyboardInput { //클래스명 수정하면 파일명까지 수정해야함
// 사용자에게 키보드로 값을 입력받는 방법
public void inputScanner1() {
/*
* 자바에서 java.util.Scanner클래스를 만들어놓음
* Scanner클래스 안에 이미 만들어져있는 메소드들을 호출하면 사용가능
*/
Scanner sc = new Scanner(System.in); //System.in => 입력받은 값을 바이트단위로 받아들이겠다.
// 간단하게 사용자의 정보를 입력받아 출력하는 프로그램 만들기
System.out.print("당신의 이름은 무엇입니까 : ");
// 사용자가 입력한 값을 문자열로 가져오는 메소드 (next(). nextLine())
// next() : 사용자가 입력한 값 중 공백이 있을 경우 공백 이전까지의 값만 가져옴
//String name = sc.next();
String name = sc.nextLine();
// nextLine() : 사용자가 입력한 모든 값을 읽어옴 (공백까지도)
System.out.print("당신의 나이는 몇살입니까 : ");
int age = sc.nextInt(); // nextInt() : 정수값 읽어들일때 사용
System.out.print("당신의 키는 몇 cm입니까(소수점 아래 첫째자리까지 입력) : ");
double height = sc.nextDouble();
System.out.println(name + "님은 " + age + "살이며, 키는 " + height + " cm입니다.");
}
public void inputScanner2() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 : ");
String name = sc.nextLine();
System.out.print("나이 : ");
int age = sc.nextInt();
/*
* nextLine() : 버퍼에서 "엔터" 이전까지의 모든 값을 가져온 후 "엔터"를 비워주는 역할
* 그 외의 메소드 : 버퍼에서 "엔터" 이전까지의 값을 가져온 후 "엔터"를 비워주지 않음
*
* sc.nextInt()/sc.nextDouble() 후 sc.nextLine()이 오게 되면
* 버퍼에 남아있는 "엔터"를 sc.nextLine()이 인식해서 사용자가 값을 입력했다고 생각
* 곧바로 읽어들여버림
*
* ==> 해결방법 : sc.nextLine()이 수행되기 전에 버퍼에 남아있는 "엔터"를 깔끔히 비우기
*
*/
// 버퍼에 남아있는 "엔터"비우기
sc.nextLine();
System.out.print("주소 : ");
String address = sc.nextLine();
System.out.print("키(cm) : ");
double height = sc.nextDouble();
System.out.println(name + "님은 "+ age + "살이며, 사는 곳은 "
+ address + "이고, 키는 " + height + "cm입니다.");
System.out.printf("%s님은 %d살이며, 사는 곳은 %s이고, 키는 %.1fcm입니다.", name, age, address, height);
}
public void inputScanner3() {
Scanner sc = new Scanner(System.in);
// 문자열을 입력받을 때 : sc.nextLine()
// 정수값을 입력받을 때 : sc.nextInt()
// 실수값을 입력받을 때 : sc.nextDouble()
// 이름, 나이, 키, 주소
System.out.print("이름은? : ");
String name = sc.nextLine();
System.out.print("나이는? : ");
int age = sc.nextInt();
System.out.print("키는?(cm) : ");
double height =sc.nextDouble();
sc.nextLine();
System.out.print("주소는? : ");
String address = sc.nextLine();
//성별(M/F)
System.out.print("성별(M/F) : ");
//char gender = sc.nextChar(); //nextChar()와 같은 메소드 없음!!
char gender = sc.nextLine().charAt(0);
// sc.nextLine()으로 문자열로 먼저 읽어들이고
// => charAt(0)을 이용해서 0번 인덱스 자리의 문자 뽑기
System.out.println( name + "님의 개인정보");
System.out.println("나이 : " + age);
System.out.println("키 : " + height);
System.out.println("주소 : " + address);
System.out.println("성별 : " + gender);
}
public void charAtTest() {
String fruit = "apple";
System.out.println(fruit.charAt(0));
char ch = fruit.charAt(4);
System.out.println(ch);
}
/*
* 1. 모니터로 어떠한 값을 "출력"하기 위해서 : System.out.print/println()
* 2. 키보드로 어떠한 값을 "입력"하기 위해서 :
* Scanner sc = new Scanner(System.in);
* sc.nextLine() : 문자열 읽어들이기
* sc.nextInt() : 정수값 읽어들이기
* sc.nextDouble() : 실수값 읽어들이기
* sc.nextLine().charAt(0) : 문자값 읽어들이기
*
* * 주의사항 *
* nextInt() / nextDouble() 뒤에 nextLine()이 와야될 경우
* => nextLine()을 한번 더 써줘서 버퍼에 남은 "엔터"를 비워주는 과정 필요!
*
*/
}