💡넌센스 퀴즈 뷰어

선생님께서 공유해주신 넌센스 퀴즈 txt 파일을 미리 지정한 경로에 넣어놓고 시작!\

해당 txt파일에는 번호/질문/답이 일정한 패턴으로 규칙이 있어 이를 활용하여 질문과 답을 구분하여 만들었다.

nonsense_quiz_355.txt
0.02MB

package jokun.KH.test0701;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class NonsenseQuizViewer {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\user\\OneDrive\\바탕 화면\\KH정보교육원\\특강\\nonsense_quiz_355.txt");
        try (BufferedReader br = new BufferedReader(new FileReader(file))){
            String data = null;
            HashMap<String, String > quizMap = new HashMap<>();
            while ((data = br.readLine()) != null){
                int length = data.length();
                if (length > 0 ){
                   String subString = data.substring(5, length); //인덱스 5번부터 마지막
                   String[] splitStr = subString.split("\\?"); // split은 정규식을 받는 매개변수
                    if (splitStr.length == 2){
                        quizMap.put(splitStr[0].trim() + "?", splitStr[1].trim());
                    }
                }
            }

            //문제 섞기
            List<String> questions = quizMap.keySet().stream().collect(Collectors.toList()); //map을 List로 변환
            Collections.shuffle(questions);

            //메뉴 출력
            System.out.println("---[넌센스 퀴즈 모음집]---");
            System.out.println("---1. 다음 문제 보기---");
            System.out.println("---2. 문제 답 보기---");
            System.out.println("---3. 종료---");

            int cnt = 0;
            Scanner sc = new Scanner(System.in);
            while (true){
                System.out.println();
                String question = questions.get(cnt);
                System.out.println(question);

                System.out.println("메뉴 번호를 입력하세요.");
                int menuNum = sc.nextInt();

                if (menuNum == 1) {//다음 문제 보기
                    cnt++;
                } else if (menuNum == 2) { //문제 답보기
                    System.out.println(quizMap.get(question));
                    System.out.println();
                    cnt++;
                }else { //종료
                    System.out.println("넌센스 퀴즈 보기가 종료되었습니다.");
                    break;
                }

            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

 

 

📜TO DO LIST

6월 24일 금요일 / 그리고 7월 1일 금요일마다 작성하여 완성시킨 TO DO LIST!

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;

public class Database {
    private static final ArrayList<String> dataList = new ArrayList<>();

    /**
    이 메서드는 할일 데이터를 추가해주는 메서드입니다.
    @param text 예시와 같이 입력해주세요. ex) "운동하기"
     */
    public boolean add(String text) {
    return dataList.add(text);
    }

    /**
     * 입력된 text를 숫자로 파싱해서 반환
     * @param text "운동하기"
     * @return 숫자가 아니면 -1 반환, 정상 파싱이면 해당 숫자 반환
     */
    private int parseInt(String text){
        try {
            return Integer.parseInt(text);
        }catch (Exception e){
            e.printStackTrace();
            // text에 문자가 들어와서 예외가 발생! 여기로 옴.
            return -1;
        }
    }

    /**
    이 메서드는 할일 데이터를 삭제해주는 메서드입니다.
    @param text 예시와 같이 입력해주세요.
                ex) "1"
                ex) "운동하기"
    @return 정상일 때는 삭제되는 아이템 이름 반환 <br>
            할일 목록중 인덱스를 찾지 못하면 null 반환 <br>

     */
    public String remove(String text) {
        int index = parseInt(text);
        if(index != -1){ //정상 인덱스가 나옴
            //정상적인 숫자가 들어올 때
            return dataList.remove(index);
        }else { //숫자를 파싱했는데 예외일 때
            int findIndex = getFindIndex(text);
            if (findIndex == -1) {
                return null;
            }else{
                // 정상 입력된 text와 동일한 인덱스를 찾음
            return dataList.remove(findIndex);

            }
        }
    }

    private int getFindIndex(String text){
        for (int i = 0; i < dataList.size(); i++){
            String str = dataList.get(i);
            if(text.equals(str)){ // true면 원하는 아이템 찾았다!
                return i;
            }
        }
        return -1;
    }

    private boolean checkListIndex(int index){
        try {
            //원래 리스트에 총 갯수가 5개인데 인덱스가 6이 들어왔으면 에러!
            String item = dataList.get(index);
            return true;
        }catch (Exception e){
            return false;
        }
    }


    /**
    이 메서드는 할일 데이터를 수정해주는 메서드입니다.
    @param text 예시와 같이 입력해주세요.
                쉼표로 구분해서 인덱스와 수정할 할일을 적어주세요.
                ex) "1,영화보기"
    */
    public HashMap<Integer, String> modify(String text) {
        HashMap<Integer,String> resultMap = new HashMap<>();
        String[] splitText = text.split(",");;
        int index = parseInt(splitText[0]);
        if (index != -1) {
            if (checkListIndex(index)) { // 이게 정상적인 인덱스인지 확인
                // 정상
                String modifyText = splitText[1];
                resultMap.put(1, dataList.set(index, modifyText));
            } else {
                resultMap.put(0, "잘못된 목록 숫자를 넣었습니다.");
            }
        } else {
            resultMap.put(0, "입력된 목록 숫자가 정상적이지 않습니다.");
        }
        return resultMap;
    }

    /**
     이 메서드는 기록된 목록을 반환해주는 메서드입니다.
     @return ArrayList<String> 형식의 목록반환
     */
    public ArrayList<String > list() {
        return dataList;
        }

    /**
     * index에 해당하는 할일을 반환하는 메소드.
     * @param index 할일에 해당하는 인덱스
     * @return index에 해당하는 할일
     */
    public String list(int index) {
        return dataList.get(index);
    }

    /**
     * 이 메서드는 할일 목록을 복사해주는 메서드입니다.
     * @param index
     */
        public int copy(int index ){
        if (dataList.size() > index){ //정상
        String data = dataList.get(index);
        dataList.add(data);
        return index;
        }else { //비정상 : index가 잘 못된 것 같음!
            return -1;
        }
        }

    /**
     * 이 메서드는 서치를 하는 메서드입니다.
     * @param keyword
     * @return
     */
    public ArrayList<String> search(String keyword){
            ArrayList<String> resultList = new ArrayList<>();
            for (String data : dataList){
                if (data.matches(".*" + keyword + ".*")){
                    resultList.add(data);
                }
            }
            return resultList;
        }
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    private static final Database db = new Database();

    public static void main(String[] args) {

        while (true) {
            printMenu();
            Scanner sc = new Scanner(System.in);
            System.out.print("원하는 메뉴 숫자를 입력해주세요 : ");
            int selectMenuNumber = sc.nextInt();
            if (!running(selectMenuNumber)) {
                System.out.println("프로그램이 종료되었습니다.");
                break;
            }
        }
    }

    private static boolean running(int selectMenuNumber){
            switch(selectMenuNumber){
                case 1: //목록
                    ArrayList<String> list = db.list();
                    int size = list.size();
                    if(size > 0 ) {
                        for (int i = 0; i < list.size(); i++) {
                            System.out.println("[" + i + "]" + list.get(i));
                        }
                    }else {
                        System.out.println("목록이 비어있습니다.");
                    }
                    return true;

                case 2: //추가
                    Scanner sc = new Scanner(System.in);
                    System.out.print("추가할 할일을 입력해주세요 : ");
                    String inputText = sc.nextLine();
                    if(db.add(inputText)){
                        System.out.println("정상적으로 할일이 입력되었습니다.");
                    }else {
                        System.out.println("오류발생");
                    }
                    return true;
                case 3: //수정
                    String modityText = getScanner("[ex) 1.영화보기] 수정할 할일을 입력해주세요 : ").nextLine();
                    HashMap<Integer, String> resultMap = db.modify(modityText);
                    String reaultStr = resultMap.get(1);
                    if(resultMap.get(1) != null){
                        System.out.println("정상적으로 " + reaultStr +"를 " + modityText + "로 수정됐습니다.");
                    }else{
                        String errorMsg = resultMap.get(0);
                        if(errorMsg != null){
                        System.out.println(errorMsg);
                        }
                    }
                        return true;
                case 4: //삭제
                    String removeText = getScanner("[ex) \"100\" 또는 \"운동하기\"] 삭제할 할일을 입력해주세요.").nextLine();
                    String itemName = db.remove(removeText);
                    if(itemName != null){
                        System.out.println(itemName + "이 삭제되었습니다.");
                    }else {
                        System.out.println("삭제 오류!");
                    }
                    return true;
                case 5: //복사
                    int inputIndex
                            = getScanner("복사할 할일이 해당하는 인덱스를 입력해주세요").nextInt();
                    int copyIndex = db.copy(inputIndex);
                    if(copyIndex != -1){
                        System.out.println(db.list(copyIndex)+ "이(가) 복사되었습니다.");
                    }else{
                        System.out.println("정상적인 인덱스가 아닙니다.");
                    }
                    return true;
                case 6: //검색
                    String searchKeyword = getScanner("검색할 할일을 입력해주세요").nextLine();
                    ArrayList<String> searchList = db.search(searchKeyword);
                    if (searchList.size() > 0){
                        for (String s : searchList){
                            System.out.println(s);
                        }
                    }else {
                        System.out.println("해당하는 목록이 없습니다.");
                    }
                    return true;
                default:
                    return false;
            }
    }

    private static Scanner getScanner(String msg){
        Scanner sc = new Scanner(System.in);
        System.out.print(msg + ":");
        return sc;
    }
    private static void printMenu() {
        System.out.println();
        System.out.println("-------ToDoList-------");
        System.out.println("-------(1. 목록)-------");
        System.out.println("-------(2. 추가)-------");
        System.out.println("-------(3. 수정)-------");
        System.out.println("-------(4. 삭제)-------");
        System.out.println("-------(5. 복사)-------");
        System.out.println("-------(6. 검색)-------");
        System.out.println("-------(999. 종료)-------");
        System.out.println();
    }
}

복사했습니다!