java 학습일기 day13 - java로 텍스트게시판 (2)

이건구·2023년 9월 12일
0

java학습일기

목록 보기
11/13

텍스트게시판 (2)

요구사항 5번 게시물삭제까지 개선버전


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    static List<Article> articles = new ArrayList<>();

    public static void main(String[] args) {
        int LastArticleNum = 0;
        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.printf("명령어를 입력해주세요. : ");
            String command = sc.nextLine();
            if (command.equals("exit")) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else if (command.equals("add")) {
                LastArticleNum++;
                System.out.printf("게시물 제목을 입력해주세요. : ");
                String title = sc.nextLine();
                System.out.printf("게시물 내용을 입력해주세요. : ");
                String content = sc.nextLine();
                System.out.println("==================");
                System.out.println("게시물이 등록되었습니다.");
                System.out.println("==================");
                Article article = new Article(title, content, LastArticleNum);
                articles.add(article);
            } else if (command.equals("update")) {
                while (true) {
                    System.out.printf("수정할 게시물 번호 또는 \"back\" : ");
                    String editNum = sc.nextLine();
                    if (editNum.equals("back")) {
                        System.out.println("==================");
                        System.out.println("목록으로 돌아갑니다.");
                        System.out.println("==================");
                        break;
                    }
                    try {
                        int number = Integer.parseInt(editNum);
                        boolean isNumExist = false;
                        for (int i = 0; i < articles.size(); i++) {
                            if (number == articles.get(i).getId()) {
                                System.out.printf("수정할 제목 : ");
                                String title = sc.nextLine();
                                System.out.printf("수정할 내용 : ");
                                String content = sc.nextLine();
                                Article article = new Article(title, content, LastArticleNum);
                                articles.set(i, article);
                                System.out.println("==================");
                                System.out.println("게시물이 수정되었습니다.");
                                System.out.println("==================");
                                isNumExist = true;
                            }
                        }
                        if (isNumExist == false) {
                            System.out.println("==================");
                            System.out.println("없는 게시물 번호입니다.");
                            System.out.println("==================");
                        } else {
                            break;
                        }
                    } catch (NumberFormatException e) {
                        System.out.println("==================");
                        System.out.println("숫자를 입력해주세요.");
                        System.out.println("==================");
                    }
                }
            } else if (command.equals("delete")) {
                while (true) {
                    System.out.printf("삭제할 게시물 번호 또는 \"back\" : ");
                    String editNum = sc.nextLine();
                    if (editNum.equals("back")) {
                        System.out.println("==================");
                        System.out.println("목록으로 돌아갑니다.");
                        System.out.println("==================");
                        break;
                    }
                    try {
                        int number = Integer.parseInt(editNum);
                        boolean isNumExist = false;
                        for (int i = 0; i < articles.size(); i++) {
                            if (number == articles.get(i).getId()) {
                                articles.remove(i);
                                System.out.println("==================");
                                System.out.println("게시물이 삭제되었습니다.");
                                System.out.println("==================");
                                isNumExist = true;
                            }
                        }
                        if (isNumExist == false) {
                            System.out.println("==================");
                            System.out.println("없는 게시물 번호입니다.");
                            System.out.println("==================");
                        } else {
                            break;
                        }
                    } catch (NumberFormatException e) {
                        System.out.println("==================");
                        System.out.println("숫자를 입력해주세요.");
                        System.out.println("==================");
                    }
                }
            } else if (command.equals("list")) {
                for (int i = 0; i < articles.size(); i++) {
                    System.out.println("==================");
                    System.out.println("번호 : " + articles.get(i).getId());
                    System.out.println("제목 : " + articles.get(i).getTitle());
                    System.out.println("내용 : " + articles.get(i).getContent());
                    System.out.println("==================");
                }
            }
        }
    }
}

기존의 코드에서 detail이나 delete, update기능을 사용할때 번호 입력부분에서 문자를 입력하면 오류가 났었는데 그 부분을 .nextInt();에서 nextLine();으로 바꾸고 parseint()로 변환해준다음에 문자가 입력되면 (NumberFormatException e)를 넣어 오류를 넘어갔다.

또한 기존의 코드는 "없는 게시물 번호입니다"를 출력한 후에 가장 처음 명령어창으로 돌아갔는데 각 기능마다 while(true)로 씌운다음 "back"을 입력하거나 옳은 게시물을 선택했을때 break;를 넣음으로 이제 "없는 게시물 번호입니다" 혹은 "숫자를 입력해주세요" 문구를 출력한후 명령어창이아닌 기능에서 번호 선택창으로 돌아가게된다.

0개의 댓글