본문 바로가기

JAVA

JAVA Scanner 클래스중 nextInt( )사용 후 nextLine( ) 사용할때 유의점

백준 Stack 문제를 풀던 도중

 

 

mport java.util.ArrayList;
import java.util.Scanner;

public class Stack {

    ArrayList<String> stackSave = new ArrayList<>();

    void push(String saveNumber) {
        stackSave.add(saveNumber);
        System.out.println("push method start saveNumber = " + saveNumber);
    }

    void pop() {

    }

    void size() {

    }

    void empty() {

    }

    void top() {

    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int stackLenth = sc.nextInt();   //sc.nextint() 시작
        Stack stack = new Stack();
        for (int i = 1; i < stackLenth; i++) {
            String stackCommend = sc.nextLine(); // sc.nextLine(); 시작
            System.out.println(stackCommend);
            String[] stackComent = stackCommend.split("\\s+");

            switch (stackComent[0]) {
                case "push":
                    stack.push(stackComent[1]);
                    break;
                case "pop":
                    stack.pop();
                    break;
                case "size":
                    stack.size();
                    break;
                case "empty":
                    stack.empty();
                    break;
                case "top":
                    stack.top();
                    break;
            }
        }
    }
}

위에 사진 처럼 처럼 3 을 입력후 공백이 생겨 원하는 결과를 얻을 수 없었다.

 

원하는 결과을 얻을 수 없었던 이유는

 

-Scanner.nextInt 메소드는 가장 마지막 (개행문자) 엔터을 제거하지 않고

 

개행문자(엔터)전까지만 숫자로 입력받는다. 이 부분에서 문제가 생기는데 

 

이후 nextLine( ) 사용하게 되면  다음 nextLine( ) 에 Scanner.nextInt 엔터키가 입력되어

 

 nextLine( ) 에 공백이 입력되어 처리되어 문제가 발생했기 때문이다.

 

해결방법은

 

Scanner.nextInt을  nextLine( ) 으로 바꾸고 형변환을 해주어 해결 했다.

 

String Lenth = sc.nextLine();//sc.nextint() 시작

이 부분을 

String lenth = sc.nextLine();   //sc.nextLine() 으로 변환
int stackLenth = Integer.parseInt(lenth);

 

으로 변환하였다

 

원하는 결과를 얻을 수 있었다!!!!

'JAVA' 카테고리의 다른 글

JAVA-배열복사  (0) 2022.05.19