
💡넌센스 퀴즈 뷰어
선생님께서 공유해주신 넌센스 퀴즈 txt 파일을 미리 지정한 경로에 넣어놓고 시작!\
해당 txt파일에는 번호/질문/답이 일정한 패턴으로 규칙이 있어 이를 활용하여 질문과 답을 구분하여 만들었다.
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();
}
}
'Backend > JAVA' 카테고리의 다른 글
[JAVA] 특강 11일차 : 가위바위보 게임 만들기 (0) | 2022.07.05 |
---|---|
[JAVA] 특강 8일차 : ID/PW확인하여 로그인(Login)하기 (0) | 2022.07.03 |
[JAVA] 특강 9일차 : 자바 문제풀이 & 코드리뷰 (0) | 2022.07.03 |
[JAVA] 특강 8일차 : 정규식 & 정규 표현식 & matches (0) | 2022.07.03 |
[JAVA] 특강 8일차 : 자바 문제풀이 & 코드리뷰 (0) | 2022.06.29 |