Java_02_Variable(변수)/B_KeyboardInput

z_uiw·2022년 5월 11일
0

Java

목록 보기
3/6

사용자에게 키보드로 값을 입력받는 방법

자바에서 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()을 한번 더 써줘서 버퍼에 남은 "엔터"를 비워주는 과정 필요!
	 * 
	 */
}
profile
개발을 합니다.

0개의 댓글