2015년 1월 27일 화요일

자바 Console 예제

*예제는 남궁성님의 코드 초보 스터디 카페에 있는 Java 1000제에서 가져왔습니다.

예제를 실행하면 '>>'와 같은 프롬프트가 나타나서 사용자의 입력을 기다리고, 사용자가 입력한 내용을 화면에 출력한다. 만일 사용자가 'q' 또는 'Q'를 입력하면 프로그램을 종료한다. 다음의 예제를 완성하세요

import java.util.*;
public class ConsoleEx1 {
public static void main(String[] args) { 
         while(true) { 
               String prompt = ">>"; 
               System.out.print(prompt); 
               
            Scanner s = new Scanner(System.in);
            String input = s.nextLine();
            System.out.println(input);
            if(input.equalsIgnoreCase("q")){
            break;
            }
       } // while(true) 
   } // main 
} // class


사용자가 입력한 명령라인을 공백(' ')을 구분자로 해서 잘라서 배열에 저장한 다음에 배열의 내용을 출력하는 예제. 코드를 완성하세요.

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();

                  String[] argArr = input.trim().split(" +");     
                   // 정규표현식으로서 얼마간의 공백이든 공백 하나로 처리한다
                   // == split("\\s+");    
                  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

사용자가 입력한 명령라인의 내용을 저장하는 save(String input)메서드와 사용자가 입력한 명령라인의 이력을 보여주는 history()메서드를 완성하세요.

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;

            q.add(input);
            if(q.size()>MAX_SIZE){
            q.poll();
            }
      } 
      // 사용자가 입력한 최근 명령을 보여주는 메서드
      public static void history() { 
           for(int i = 0; i < q.size(); i++){
         Object aa = q.get(i);
         
         System.out.println((i+1)+"."+aa);
         
           }
      } 
} // class

사용자 입력을 받는 프롬프트에 현재 작업중인 폴더(디렉토리)의 경로를 표시하는 예제의 코드를 완성하세요.

import java.util.*; 
import java.io.*; 
class ConsoleEx4 { 
      static String[] argArr;                         // 입력한 매개변수를 담기위한 문자열배열 
      static LinkedList q = new LinkedList(); // 사용자가 입력한 내용을 저장할 큐(Queue) 
      static final int MAX_SIZE = 5;              // Queue에 최대 5개까지만 저장되도록 한다. 

      static File curDir;                         // 현재 디렉토리 

      static {
    try{
    String systemType = "user.dir";
     File tempFile = new File(systemType);
     curDir = tempFile.getAbsoluteFile();
    }catch(Exception e){
    System.out.println(e.getMessage());
    }
         
      } 
      public static void main(String[] args) {
            Scanner s = new Scanner(System.in); // 한번만 생성해서 재사용하면 되므로 반복문 밖으로 이동

            while(true) { 
                  try { 
                        String prompt = curDir.getCanonicalPath() + ">>"; 
                        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")) { 
                              history(); 
                        } else { 
                              for(int i=0; i < argArr.length;i++) { 
                                    System.out.println(argArr[i]); 
                              } 
                        } 
                  } catch(Exception e) { 
                        System.out.println("입력오류입니다."); 
                  }                   
            } // while(true) 
      } // main

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

            q.add(input); // queue에 저장한다.

            // queue의 최대크기를 넣으면 제일 오래된 저장값을 삭제한다. 
            if(((LinkedList)q).size() > MAX_SIZE) 
                  q.remove(); 
      } 

      public static void history() { 
            int i=0; 

            // LinkedList의 내용을 보여준다. 
            ListIterator it =q.listIterator(); 

            while(it.hasNext()) { 
                  System.out.println(++i+"."+it.next()); 
            } 
      } 
} // class

//여기서 접는다 도움이 안되는 거 같다.

댓글 없음:

댓글 쓰기