2024-07-03 19:37:52

우측 상단의 라이트 모드를 켜주세요

자바에서 키를 입력할 때 System.in은 키보드로부터 직업 읽는 자바의 표준 입력 스트림으로

키 값을 바이트(문자 X)로 리턴한다.

따라서 응용프로그램이 문자 정보로 변환을 해야한다.

이에 따라 여러 클래스가 생겼고, 그 중 가장 많이 사용하는 클래스는 Scanner 클래스이다.

Scanner  클래스

System.in에게 키를 읽도록 하고, 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴

사용방법

가장 상단에 import java.util.Scanner; 를 선언해주면 된다.

Scanner에서 키 입력 받기

- Scanner는 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽음

- 공백문자 : '\t'(탭), '\f'(페이지바꿈), '\r'(줄바꿈 시 맨 앞으로), ' ', '\n'(줄바꿈)

- 개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음

Scanner에서 주로 사용하는 메소드

String next() : 다음 토큰을 문자열로 리턴

byte nextByte() : 다음 토큰을 byte 타입으로 리턴

short nextShort() : 다음 토큰을 short 타입으로 리턴

int nextInt() : 다음 토큰을 int 타입으로 리턴

long nextLong() : 다음 토큰을 long 타입으로 리턴

float nextFloat() :  다음 토큰을 float 타입으로 리턴

double nextDouble() : 다음 토큰을 double 타입으로 리턴

boolean nextBoolean() : 다음 토큰을 boolean 타입으로 리턴

String nextLine() : '\n'을 포함하는 한 라인틀 읽고 '\n'을 버린 나머지 문자열 리턴

void close() : Scanner의 사용 종료

boolean hasNext() : 현재 입력된 토큰이 있으면 true, 아니면 입력 때 까지 무한정 대기,
                               새로운 입력이 들어오면 true 리턴 

                               [Ctrl] + z 키가 입력되면 입력이 끝으로 false리턴

 

/*

어떤 프로그래밍을 하던 가장 많이 해보는 테스트 중 하나 별모양 찍기

피라미드 모양, 다이아몬드 모양 등등을 출력해보는 코드를 작성해보자

*/

public class DoublyForStar{
/*
보고자 하는 모양

   *
  ***
 *****
*******

필요한 변수의 개수
공백의 개수 이하 spaceCnt
별의 개수 이하 starCnt

i(줄 수)   starCnt   spaceCnt   별의 규칙성   공백의 규칙성
1           1           3       2i -1       4-i
2           3           2       2i -1       4-i
3           5           1       2i -1       4-i
4           7           0       2i -1       4-i
.... 등 줄 수만 바뀌면 언제든지 가능
규칙성을 찾았으니 다음은 이를 코드 형태로 만들어보자
*/
    public static void main(String[] args){
        int starCnt = 1;    // 별의 개수
        int spaceCnt = 3;   // 공백의 개수
        for(int i = 1; i <= 4; i++){
            starCnt = (2*i) -1; // 별의 규칙성
            spaceCnt = 4 - i;   // 공백의 규칙성
            for(int j = 1; j <= spaceCnt; j++){
                System.out.print(" "); // 공백을 출력
            }
            for(int k = 1; k <= starCnt; k++){
                System.out.print("*"); // 별을 출력
            }
            System.out.println(""); // 1회 출력 시 줄바꿈
        }
    }
}

그렇다면 다이아몬드는 어떻게 되어있을까?

public class DoublyForStar2{
/*
보고자 하는 모양

   *
  ***
 *****
*******
 *****
  ***
   *

필요한 변수의 개수
공백의 숫자 이하 spaceCnt
별의 숫자 이하 starCnt

i(줄 수)      starCnt    spaceCnt       별의 규칙성      공백 규칙성
1               1           3               2i -1            4-i
2               3           2               2i -1            4-i
3               5           1               2i -1            4-i
4               7           0               2i -1            4-i        // 최대치 변곡점
5               5           1               14-2i +1         i-4        // 14는 마지막 줄 수 * 2
6               3           2               14-2i +1         i-4
7               1           3               14-2i +1         i-4        // i의 끝
*/
    public static void main(String[] args){
        int starCnt = 1;  // 초기 값
        int spaceCnt = 3; // 초기 값
        for(int i = 1; i <= 7; i++){
            if(i <= 4) {			// 변곡점 이전 까지 규칙성
                starCnt = 2*i - 1;
                spaceCnt = 4-i;
            } else {				// 변곡점 이후의 달라지는 규칙성
                starCnt = 14 - (2*i) + 1;
                spaceCnt = i - 4;
            }						// 이후는 똑같음 if 문을 써서 여러 for문을 거칠 필요 없이 사용
            for(int j = 1; j <= spaceCnt; j++){
                System.out.print(" ");
            }
            for(int k = 1; k <= starCnt; k++){
                System.out.print("*");
            }
            System.out.println("");  // 줄바꿈
        }
    }
}

-----------------------------------------------------------------------------------------

사람들이 프로그래밍을 하다보면 가장 먼저 무너지는 구간 중 첫 번째인 별찍기에 대해서 정리해 보았다.

'Java' 카테고리의 다른 글

Java 정리 4-1  (0) 2024.07.01
Java 정리 3  (0) 2024.06.28
Java 정리 2-3  (0) 2024.06.26
Java 정리 2-2  (0) 2024.06.25
Java 정리 2-1  (0) 2024.06.25