230524 TIL

보트·2023년 5월 24일
0

JAVA

목록 보기
3/8

JAVA

문제1

Stack<Integer> intStack = new Stack<Integer>();

        intStack.push(124);
        intStack.push(14);
        intStack.push(1);
        
        while(!intStack.empty()){
            // 제일 위에 있는 요소가 출력되면서 stack에서 빠짐
            System.out.println(intStack.pop());
        }
!intStack.isEmpty()

강사님이 isEmpty()를 사용하셨는데 자동완성을 잘못 보고 empty()를 사용했다.

알게된 점

java.util.Stack<E>
public boolean empty()

Tests if this stack is empty.
Returns: true if and only if this stack contains no items; false otherwise.

스택이 비었다면 true, 아이템이 없다면 false

java.util.Vector<E>
@Contract(pure = true)  
public boolean isEmpty()

Tests if this vector has no components.
Specified by: isEmpty in interface List
Overrides: isEmpty in class AbstractCollection
Returns: true if and only if this vector has no components, that is, its size is zero; false otherwise.

List 인터페이스의 메서드

next() vs nextLine()
next() : 다음 토큰만 문자열로 리턴
nextLine() : \n 을 포함하는 한 라인을 읽고 \n 을 버린 나머지만 리턴

관련해 새로 찾아보다가 알게된 것
isEmpty() : 문자열의 길이를 체크 후 길이가 0인 경우에 true 리턴, JAVA 6 이후
isBlank() : 문자열이 비어있거나 빈 공백을 포함하는 경우에 true 리턴, JAVA 11 이후

System.out.println("  ".isEmpty()); // false
System.out.println("  ".isBlank()); // true

문제2

		Scanner sc = new Scanner(System.in);
        String collectionName = sc.next();

        String title = sc.nextLine();

        switch (collectionName){
            case "List":
                ArrayList<String> strList = new ArrayList<>();
                
                while(true){
                    String text = sc.nextLine();
                    if(Objects.equals(text,"끝")){
                        break;
                    }
                    strList.add(text);
                }
                System.out.println("[ " + collectionName + " 으로 저장된 " + title + " ]");
                for(int i=0; i<strList.size(); i++){
                    int number = i+1;
                    System.out.println(number + ". " + strList.get(i));
                }
                break;

이렇게 작성하면 title이 제대로 입력되지 않고 컬렉션 안으로 입력된다.

시도

  1. switch문 안에서 title 입력받기
    -> 생성은 switch문 바깥에서 해야함
    -> 여전히 title을 제대로 입력받지 못함
  2. String collectionName = sc.nextLine(); 으로 수정하기
    -> 성공
  3. collectionName, title 모두 next()사용하기
String collectionName = sc.next();
String title = sc.next();

-> 레시피의 첫째 줄이 입력되지 않는다.

알게된 점

next() : 공백 전까지 입력받음
nextLine() : 엔터를 치기 전까지의 문장 전체 입력받음
둘을 섞어서 쓰다보면 입력 버퍼에 \n(개행문자, enter)가 포함되어 제대로 입력받지 못할 수도 있음

profile
일주일에 한 번

0개의 댓글