ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java1000제] 콘솔 만들기 - 남궁성의 초보 코드 스터디
    JAVA 2022. 8. 12. 15:46
    728x90
    반응형
     

    남궁성의 코드초보스터디(자바 java... : 네이버 카페

    전문가가 지도하는 스터디카페에요. 프로그래밍언어(자바 java, C언어)를 제대로 배우고픈 분들 오세요.

    cafe.naver.com

    1단계

    더보기

    [문제1] 에제를 실행하면 '>>'와 같은 프롬프트가 나타나서 사용자의 입력을 기다리고,

                사용자가 입력한 내용을 화면에 출력한다. 만일 사용자가 'q' 또는 'Q'를 입력하면 프로그램을 종료한다.

                다음의 예제를 완성하세요.

     

    [예제ConsoleEx1.java]

    import java.util.*;

    class ConsoleEx1 {
          public static void main(String[] args) {
                while(true) {
                      String prompt = ">>";
                      System.out.print(prompt); 
                      

                      /*

                         다음과 같은 내용의 코드를 넣으세요.                  

                         1. 화면으로부터 라인단위로 입력받는다.  - java.util.Scanner클래스 사용
                         2. q 또는 Q를 입력하면 실행종료한다.

                      */


                 } // while(true)
          } // main
    } // class

     

     

    [실행결과]

    >>hello
    hello
    >>help
    help
    >>ok
    ok
    >>q

    import java.util.*;
    
    public class Q1{
        public static void main(String[] args){
            while(true){
                String prompt = ">>";
                System.out.print(prompt);
                
                // ========================
                
                Scanner s = new Scanner(System.in);
                String str = s.nextLine();
                
                if (str.equalsIgnoreCase("Q")){
                    System.exit(0);
                }esle{
                    System.out.println(str);
                }
                
                // ========================
            }
        }
    }

    2단계

    더보기

    [문제2] 사용자가 입력한 명령라인을 공백(' ')을 구분자로 해서 잘라서 배열에 저장한 다음에

               배열의 내용을 출력하는 예제. 코드를 완성하세요.

     

    [예제ConsoleEx2.java]

    import java.util.*;

    class ConsoleEx2 {
          static String[] argArr;       // 입력한 매개변수를 담기위한 문자열배열

          public static void main(String[] args) {
                while(true) {
                      String prompt = ">>";
                      System.out.print(prompt);
                     
                      // 화면으로부터 라인단위로 입력받는다.
                      Scanner s = new Scanner(System.in);
                      String input = s.nextLine();


     

                     /*

                         다음의 코드를 완성하세요.

                         1. 입력받은 값에서 앞뒤 공백을 제거한다. (String클래스의 trim()사용)
                         2. 입력받은 명령라인의 내용을 공백을 구분자로 해서 나눠서 argArr에 담는다.

                             String클래스의 split(String regex)를 사용 - 공백이 하나 이상인 경우에도 하나의 공백으로 간주해야함

                             실행결과를 주의깊게 확인하세요.

                     */

                      if(input.equalsIgnoreCase("Q")) { // q 또는 Q를 입력하면 실행종료한다.
                            System.exit(0);
                      } else {
                            for(int i=0; i < argArr.length;i++) {
                                  System.out.println(argArr[i]);
                            }
                            /* 위의 코드를 향상된 for문으로 변경하면 다음과 같다.
                            for(String arg : argArr) {
                                  System.out.println(arg);                                                      
                            }
                            */

                      }
                } // while(true)
          } // main
    } // class

     

     

    [실행결과]

    >>java ConsoleEx2.java aaa     bbb      ccc
    java
    ConsoleEx2.java
    aaa
    bbb
    ccc
    >>q

    import java.util.*;
    
    public class HelloWorld {
        public static void main(String[] args) {
            while(true){
                String prompt = ">>";
                System.out.print(prompt);
                
                Scanner s = new Scanner(System.in);
                String input = s.nextLine();
                // ================================
                
                String[] argArr = input.trim().split(" +");
                // " +"은 뒤에 무조건 문자가 있어야한다는 정규표현식이다.
                
                // ================================
                if(input.equalsIgnoreCase("Q")){
                    System.exit(0);
                }else{
                    for(int i = 0; i < argArr.length; i++){
                        System.out.println(argArr[i]);
                    }
                }
            }
        }
    }

    3단계

    더보기

    [문제3] 사용자가 입력한 명령라인의 내용을 저장하는 save(String input)메서드와 사용자가 입력한

                 명령라인의 이력을 보여주는 history()메서드를 완성하세요.

     

    [예제ConsoleEx3.java]

    import java.util.*;

    class ConsoleEx3 {
          static String[] argArr;                         // 입력한 매개변수를 담기위한 문자열배열
          static LinkedList q = new LinkedList(); // 사용자가 입력한 내용을 저장할 큐(Queue)
          static final int MAX_SIZE = 5;              // q(큐)에 저장될 수 있는 값의 개수

     

          public static void main(String[] args) { 
                Scanner s = new Scanner(System.in); // 한번만 생성해서 재사용하면 되므로 반복문 밖으로 이동

                while(true) {
                      String prompt = ">>";
                      System.out.print(prompt);
                     
                      // 화면으로부터 라인단위로 입력받는다. 
                      String input = s.nextLine();

                      save(input);

                      input = input.trim();        // 입력받은 값에서 불필요한 앞뒤 공백을 제거한다.
                      argArr = input.split(" +"); 


                      String command = argArr[0].trim();

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

                      command = command.toLowerCase(); // 명령어를 소문자로 바꾼다.

                      if(command.equals("q")) { // q 또는 Q를 입력하면 실행종료한다.
                            System.exit(0);
                      } else if(command.equals("history")) {  // equalsIgnoreCase대신 equals를 사용.
                            history();
                      } else {
                            for(int i=0; i < argArr.length;i++) {
                                  System.out.println(argArr[i]);
                            }
                      }
                } // while(true)
          } // main



          public static void save(String input) {
                if(input==null || "".equals(input)) return;


                /*

                    다음의 코드를 완성하세요.

                    1. queue에 저장한다.
                    2. queue의 최대크기(MAX_SIZE)를 넣으면 제일 오래된 저장값을 삭제한다. 

               */
          }

          // 사용자가 입력한 최근 명령을 보여주는 메서드
          public static void history() {
                int i=0;

                /*

                    다음의 코드를 완성하세요.
                    1. LinkedList에 저장된 내용(최근 MAX_SIZE개의 명령어)을 보여준다. 

               */
          }
    } // class

    // Online Java Compiler
    // Use this editor to write, compile and run your Java code online
    import java.util.*;
    
    public class HelloWorld {
        static String[] argArr;
        static LinkedList q = new LinkedList();
        static final int MAX_SIZE = 5;
        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            
            while(true){
                String prompt = ">>";
                System.out.print(prompt);
    
                String input = s.nextLine();
                save(input);
                input = input.trim();
                argArr(input.split(" +"));
                String command = argArr[0].trim();
                
                if("".equals(command)){
                    continue;
                }
                command = command.toLowerCase();
                if(command.equals("q")){
                    System.exit(0);
                }else if (command.equals("history")){
                    history();
                }else{
                    for(int i = 0; i < argArr.length; i++){
                        System.out.println(argArr[i]);
                    }
                }
            }
        }
        public static void save(String input){
            if(input == null || "".equals(input)){
                return;
            }
            //=============================
            
            System.out.println(input + " Saving....");
            q.offer(input); // 추가
            if(q.size() > MAX_SIZE){
                q.poll(); // 가장 밑에 있는 값을 삭제한다.
            }
            
            //=============================
        }
        
        public static void history(){
            int i = 0;
            // ============================
            
            for(int k = 0; k < q.size(); k++){
                System.out.println(q.get(k));
                // 배열이 아니기 때문에 q[k] 이런건 안된다.
            }
            
            // ============================
        }
    }

     

    728x90
    반응형
Designed by Tistory.