ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 Queue 활용해보기
    Java/자바의정석 2023. 2. 27. 16:59
    반응형

    앞선 게시글에서 Stack을 활용하여 예제를 다루어보았는데 이번에는 Queue를 활용해보자.

    package JavaChap11;
    
    import java.util.*;
    
    class Ex11_4 {
        static Queue q = new LinkedList();
        static final int MAX_SIZE = 5; 
    
        public static void main(String[] args) {
            System.out.println("help를 입력하면 도움말을 볼 수 있습니다.");
    
            while(true) {
                System.out.print(">>");
                try {
                    // 화면으로부터 라인단위로 입력받는다.
                    Scanner s = new Scanner(System.in);
                    String input = s.nextLine().trim(); //공백 제거 -> 앞뒤 공백
    
                    if("".equals(input)) continue;
    
                    if(input.equalsIgnoreCase("q")) {
                        System.exit(0); // 프로그램 종료
                    } else if(input.equalsIgnoreCase("help")) {
                        System.out.println(" help - 도움말을 보여줍니다.");
                        System.out.println(" q 또는 Q - 프로그램을 종료합니다.");
                        System.out.println(" history - 최근에 입력한 명령어를 "
                                + MAX_SIZE +"개 보여줍니다.");
                    } else if(input.equalsIgnoreCase("history")) { //대소문자 구별 안함
                        int i=0;
                        // 입력받은 명령어를 저장하고,
                        save(input);
    
                        // LinkedList의 내용을 보여준다.
                        LinkedList tmp = (LinkedList)q;
                        ListIterator it = tmp.listIterator();
    
                        while(it.hasNext())
                            System.out.println(++i+"."+it.next());
                    } else {
                        save(input);
                        System.out.println(input);
                    } // if(input.equalsIgnoreCase("q")) {
                } catch(Exception e) {
                    System.out.println("입력오류입니다.");
                }
            } // while(true)
        } //  main()
        public static void save(String input) {
            // queue에 저장한다.
            if(!"".equals(input)) //if(!input.equals(""))
                q.offer(input); //큐에 저장 명령
    
            // queue의 최대크기를 넘으면 제일 처음 입력된 것을 삭제한다.
            if(q.size() > MAX_SIZE)  // size()는 Collection인터페이스에 정의
                q.remove(); //q.poll()도 동일하다.
        }
    } // end of class

    =================실행결과=================

    1.d
    2.history
    >>history
    1.d
    2.history
    3.history
    >>history
    1.d
    2.history
    3.history
    4.history
    >>history
    1.d
    2.history
    3.history
    4.history
    5.history
    >>history
    1.history
    2.history
    3.history
    4.history
    5.history
    >>q


    static Queue q = new LinkedList();
    static final int MAX_SIZE = 5; 

    우선 Queue를 구현하고, 최대 5개까지만 저장이 가능하도록 설정을해준다.

     

    while(true) {
        System.out.print(">>");

    무한 반복문으로 수행을 시켜준 뒤

    Scanner s = new Scanner(System.in);
    String input = s.nextLine().trim();

    값을 입력받은 뒤 입력받은 값의 앞뒤 공백을 제거해준다.

    if("".equals(input)) continue;

    빈문자열이라면 continue가 실행되어 다시 while(true)로 이동하여 >>가 노출되어진다.

     

    if(input.equalsIgnoreCase("q")) {
        System.exit(0); // 프로그램 종료
    } else if(input.equalsIgnoreCase("help")) {
        System.out.println(" help - 도움말을 보여줍니다.");
        System.out.println(" q 또는 Q - 프로그램을 종료합니다.");
        System.out.println(" history - 최근에 입력한 명령어를 "
                + MAX_SIZE +"개 보여줍니다.");
    } else if(input.equalsIgnoreCase("history")) { //대소문자 구별 안함
        int i=0;
        // 입력받은 명령어를 저장하고,
        save(input);
    
        // LinkedList의 내용을 보여준다.
        LinkedList tmp = (LinkedList)q;
        ListIterator it = tmp.listIterator();
    
        while(it.hasNext())
            System.out.println(++i+"."+it.next());
    } else {
        save(input);
        System.out.println(input);
    } /

    대소문자를 구별하지 않고 q를 입력받는다면 프로그램을 종료한다.

    help, q or Q, history 와같은 기능들을 구현해두고 여기서 자세히 보아야할곳은 history이다

     

    history를 입력받은 경우 i =0으로 설정하고 입력한 history도 save를 한다.

     

    그리고 LinkedList를 구현하여 지금까지 입력받아온 리스트들을 hasNext()를 이용하여 다음 요소를 계속 불러온다.

     

    최대 5개까지의 리스트를 불러들이며 FIFO구조로 가장 먼저 들어온 요소들이 가장 먼저 추출되어 사라진다.

     

    if(q.size() > MAX_SIZE)  // size()는 Collection인터페이스에 정의
        q.remove();

    사이즈는 애초에 5로 설정해두었으며 5이상의 입력어가 들어온다면 내용을 삭제한다

    FIFO구조로 remove되어 나간다.

    반응형

    'Java > 자바의정석' 카테고리의 다른 글

    자바의정석 Arrays여러가지 메서드  (0) 2023.02.27
    자바 Iterator란?  (0) 2023.02.27
    Stack 활용해보기  (0) 2023.02.27
    LinkedList와 ArrayList의 차이  (0) 2023.02.27
    Java ArrayList의 개념 및 메서드  (0) 2023.02.27

    댓글

Designed by Tistory.