카테고리 없음

20240807 개발공부

llmmhh 2024. 8. 7. 21:23

살짝 코드 리뷰같은 느낌으로 공부하면서 작성한 코드를 올린다.

while (true) {
    System.out.println("과목코드를 입력하세요 필수3개이상 선택2개이상");
    System.out.println("현재 상태 필수:"+require+"개 선택:"+choice+"개 선택되었습니다.");
    subjectId = sc.nextInt();
    sc.nextLine();
    flag=true;
    if(requireAndChoice.contains(subjectId)) {
        //학생의 과목리스트에 존재하면(중복불가)
        System.out.println("입력하신 코드는 이미존재합니다");
        continue;
    }
    for (int i = 0; i < subjectInfoList.size(); i++) {
        if (subjectInfoList.get(i)[0].equals(subjectId + "")) {
            if (subjectInfoList.get(i)[2].equals("선택")) {
                //입력받은코드와 같은 과목이 존재하면 그 과목의 타입이선택인지 필수인지확인함
                //이 if문을 통과한다면 flag값이 false가된다.
                //선택과목if문을 통과하면 choice값이 증가
                requireAndChoice.add(subjectId);
                flag=false;
                choice++;
                break;
            }
            if (subjectInfoList.get(i)[2].equals("필수")) {
                //입력받은코드와 같은 과목이 존재하면 그 과목의 타입이선택인지 필수인지확인함
                //이 if문을 통과한다면 flag값이 false가된다.
                //필수과목if문을 통과하면 require값이 증가
                requireAndChoice.add(subjectId);
                flag=false;
                require++;
                break;
            }
        }
    }
    if(flag){
        //만약 타입if문을 한번이라도 통과했다면 flag값이 false가 되어 동작하지않는다.
        //하지만 한번도통과하지못했다면(입력받은 코드와 동일한 코드를 가진 과목이 없다면)
        //존재하지않는코드라고 출력한후 while문 처음으로 돌아간다.
        System.out.println("존재하지 않는코드입니다.");
        continue;
    }
    if(requireAndChoice.size()>=subjectListMaxCount)
    //9이상의 subjectList는담을수 없다 subjectList의 최대갯수는 9개
    {
        System.out.println("담을수 있는 모든 과목을 담으셨습니다. 욕심이 많으시군요.");
        break;
    }
    if (require >= 3 && choice >= 2) {
        //필수 3개이상과 선택2개이상을 담았다면 더담을때마다 그만담을지 물어본다.
        System.out.println("필수과목3개이상과 선택과목2개이상을 선택하셨습니다. 그만담으시겠습니까? 0(Yes), 1(No)");
        int yesOrNo = sc.nextInt();
        sc.nextLine();
        if (yesOrNo == 0)
            break;
    }
}

선택 과목, 필수 과목을 일정 수량만큼 받는법.

ArrayList<Integer> requireAndChoice = new ArrayList<>();

먼저 리스트를 쓰기 위에 while 문 위에 ArrayList를 만들고,

1. 과목의 정보 리스트(1번째 칸 인덱스로는 [0]  // 과제 번호 값이 들어있음.)와 등록하는 과목의 숫자가 일치하는지. 확인  

2. 과목의 정보 리스트(3번째 칸 인덱스로는 [2]  // 선택,필수 값이 들어있음.)가 선택,필수 인지를 확인

3. 필수이면  require++ (위에 0으로 생성한 int 변수),  선택이면  choice++(위에 0으로 생성한 int 변수)

4. requireAndChoice.add() = 리스트에 ()안에 내용을 넣는법. subjectId 값을 넣어줌.

5. 등록된 sujectList (과제종류) 를 초과해서 등록하지 못하게 제한. requireAndChice.size() >= subjectListMaxCount 경우

6. 선택,필수 과목 필요한 만큼 선택했을 때, 더 등록할 것인지 확인

7. while 문으로 반복처리 하기 때문에 위에서 부터 시작.

8. 중복으로 입력한게 있는지 처리 필요. 리스트.contain() 으로 확인 = 리스트에 () 안에 넣은 값이 포함되어 있는지 확인

9. 이미 등록되어있다고 안내해주고 처음부터 입력하게 반복문 다시 진행으로 마무리.