KH/JAVA

#2 scanner, printf,in.read()

오늘의 진 2022. 7. 7. 12:13

System.in.read() 와 Scanner

: System.in.read(); 메소드는 키보드로 부터 키를 입력 받은 후에 입력 받은 
내용을 다시 화면에 출력한다. System.on.read() 메소드는 사용자가 입력한 값을 숫자 형태로 인식하고 
이를 in.read() 즉 해당 문자에 대한 유니코드 값 형태로 읽어온다. 그러므로 입력 받은 문자를
다시 출력하기 위해서는 char 형태로 변환해야한다.
사용자가 입력한 내용을 곧바로 프로그램에 전달하는 것이 아니라 버퍼에 저장되어 있다가
[enter]키를 눌러야 System.in.read()메소드가 버퍼로 부터 데이터를 읽어온다. 사용자는 화면에 한번에
여러가지 문자를 입력할 수 있지만 System.in.read()메소드는 한번에 한문자만 읽어 올 수 있다.
키보드를 통해서 사용자로 부터 데이터를 입력 받는 방법은 
System.in.read() 보다 Scanner 클래스를 사용하는 것이 더 편하다.

 

1.Scanner

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Scanner.htmld

 

Scanner (Java SE 11 & JDK 11 )

Scans the next token of the input as a float. This method will throw InputMismatchException if the next token cannot be translated into a valid float value as described below. If the translation is successful, the scanner advances past the input that match

docs.oracle.com

예제(정수 2개를 입력받아 나눗셈을 하여 소숫점이하 3자리까지 출력하기)

import  java.util.Scanner;
class Scanner_1 
{
	public static void main(String[] args) 
	{
		Scanner input = new Scanner(System.in);
		int e,f;
		double z;
		System.out.print("정수 두개를 입력하세요 ");
		e= input.nextInt();
		f= input.nextInt();
		z= e/(double)f;
		System.out.printf("%d 나누기 %d = %.3f \n",e,f,z);
	}
}

(예)

nextLine() : 문자열을 입력받음(String)

nextInt() : int 를 입력받음

 

 

 

 

2.System.in.read();

: 버퍼를 사용하기 때문에 효율적이며 IOException의 throw를 필수로 해야함.
문자를 하나씩만 가져올수 있으며 아스키 코드로 변환하여 가져온다.
예를들어 1을 read()로 받으면 아스키 코드 번호인 49를 출력할수있다.

여러개를 입력해도 하나만 입력받을 수 있다.

또한 숫자는 0-9까지 입력받을수 있다.

	System.out.println("점수를 입력하세요 : ");
		int score = System.in.read()-'0';

입력받은 숫자를 아스키코드번호가 아니라 수로 프린트 하거나 받으려면 '0'을 빼거나 0의 아스키코드번호인 48을 빼주면된다. 

 

 

 

 

3. printf  활용 방법

-정수형일때

 

 형식            적용             출력상태          설명
  %자리수 d    printf("%5d",16)  ...16         빈공간이 왼쪽에 생김
  %-자리수 d   printf("%-5d",16)   16...       빈공간이 오른쪽에 생김
  %0자리수 d    printf("%05d",16)  00016       왼쪽에 생긴 빈공간에0채움

-

System.out.printf( "#1234567891234567891234567890 ");
System.out.printf( " \n/%d/",16);
System.out.printf( "\n/%5d/",16); // 5자리 마련후 오른쪽 정렬
System.out.printf( "\n/%-5d/",16); //5자리 마련후 왼쪽정렬
System.out.printf( "\n/%1d/",16); // 지정된 자릿수 무시됨
System.out.printf( "\n/%05d/\n",16);//왼쪽 빈 여백을 0으로 채움

-실수형일때

: 실수를 화면에 출력할때에도 먼저 자릿수를 확보해야 출력이 가능하다.
%f 형식 지정자를 이용하여 실수 값을 출력시키면 소숫점 이하는 자동적으로 6자리까지
출력된다. 만일 적당한 자릿수 만큼만 출력하려면 %전체자리수,소숫점이하 자릿수f와 같이 자릿수를 지정하면된다.

 

실수데이터 출력 형식

적용                                     출력상태               설명
printf("%f\n",0.1)                 0.100000         %f는 기본적으로 소수점이하 6자리까지출력
printf("%5.3f\n",0.1)            0.100                전체자리수 5자리 소숫점이하 3자리까지 출력
printf("%.2f\n",0.1)              0.10                  소숫점이하 2자리까지 출력
printf("%f\n",123.456)         123.456000      %f는 기본적으로 소숫점 이하 6자리까지 출력
printf("%7.2f\n",123.456)    123.46              소수이하 자리수가 작으면 반올림
printf("%5.3f\n",123.456)    123.456            소수점 앞자리가 작으면 무시되고 제대로 123.456출력

5.3f : 라는 것은 소숫점을 포함하여 8자리 이고 소숫점 아래는 3자리까지 끊어주겟다는말이다.

       만약 수가 8자리를 넘어버리면 8.3f를 무시하고 모두 출력되고 그이하의 수라면 자리수를 채워준다

예: 2.1234 라면 02.123으로 자리수를 5자리로 맞춰준다.

 

-그외

%c 문자형식으로 출력(수를 입력해도 String으로 인식하여 출력가능)
%s 문자열 형식으로 출력

 

 

'KH > JAVA' 카테고리의 다른 글

#6.for(연습문제)  (0) 2022.07.11
#5 Switch문,Math.random()  (0) 2022.07.08
#4 cmd(명령 프롬프트)  (0) 2022.07.07
#3 if else  (0) 2022.07.07
#1 삼항연산자,형변환  (0) 2022.07.07