[java] 반복문-배열 연습문제 : 로또, 회원가입&회원목록 출력, 학점&평균&등수 출력하기

심심이·2024년 1월 28일
1

java

목록 보기
24/46

1. 로또 문제

요구 사항 >

무작위의 로또 번호를 출력한다.
로또 번호는 서로 중복되서는 안된다.

예시>
4,2,6,5,7,3
30,33,37,15,6,31



코드 풀이 >


	public static void main(String[] args) {
		Random random = new Random();

		int[] userRotto = new int[6]; //로또 번호 출력

		outer:
		for(int i = 0; i<userRotto.length; i++) {
			int randomNumber = random.nextInt(45) + 1; // 1~45까지 출력
			for (int j = 0; j<userRotto.length; j++) {
				if(userRotto[j] == randomNumber) { //랜덤 번호가 userRotto[] 배열 인덱스 안 값과 같으면
					i--;
					continue outer; //밖으로 나와서 continue하면 증감식 해주기때문에 i--한뒤 continue함
				}
			}
				userRotto[i] = randomNumber; //중복이 아니면 인덱스에 넣음
		}
		for (int i = 0; i<userRotto.length; i++) {
			String add = (i == 0)? "":",";
			System.out.print(add + userRotto[i]);
		}

	}



리팩토링 >


public static void main(String[] args) {
	Random random = new Random();

	int[] userRotto = new int[6]; //로또 번호 출력

	for(int i = 0; i<userRotto.length; i++) {
		userRotto[i] = random.nextInt(45) + 1; // 랜덤 값을 배열에 넣는다
		for (int j = 0; j<i; j++) { //j는 i까지 돈다(입력한 값들만 체크할거라서)
			if(userRotto[i] == userRotto[j]) { //랜덤 번호가 userRotto[] 배열 인덱스 안 값과 같으면
				i--;
				break; //이 부분은 스킵하는 것이기 때문에 i가 헛증가하고 있어서 i--해준다.
			}
		}
	}
	for (int i = 0; i<userRotto.length; i++) {
		String add = (i == 0)? "":",";
		System.out.print(add + userRotto[i]);
	}

}
// outer: 이렇게 라벨 쓰는게 싫어서 좀더 간결하게 해 봤다 ㅠㅠ 반복문.. 어렵다 



2. 회원 가입, 가입한 회원 목록 출력

요구 사항 >



	// == 비밀번호가 규칙에 맞는지 틀리는지 알려주는 static 메소드 생성하기 == //
	/*
	   비밀번호 규칙은 비밀번호의 길이는 8글자 이상 15글자 이하이어야 하고,
	   또한 비밀번호는 영문대문자, 영문소문자, 숫자, 특수기호가 혼합되어야만 한다.
	   규칙에 맞으면 true 를 리턴해주고, 규칙에 틀리면 false 를 리턴하도록 만든다.  
	*/
    
    
    
===========>>메뉴<<============
1. 회원가입	2.모든회원조회	3.프로그램종료
================================
○ 선택하세요 ->4
[경고] 메뉴에 없는 것입니다.

===========>>메뉴<<============
1. 회원가입	2.모든회원조회	3.프로그램종료
================================
○ 선택하세요 ->1
아이디 : dasddsa
ㅁ비밀번호 : 156
>>경고: 비밀번호는 8글자 이상 15글자 이하, 숫자, 소문자, 대문자, 특문이 포함되어야 함
ㅁ비밀번호 : qwerTr1!
ㅁ성명 : 이순신
>회원가입 성공!<

===========>>메뉴<<============
1. 회원가입	2.모든회원조회	3.프로그램종료
================================
○ 선택하세요 ->1
아이디 : addsa
ㅁ비밀번호 :  qwerTr1!
ㅁ성명 : g
공백이 없는 한글로만 되어야 하고 글자 길이는 2글자 이상 6글자 이하이어야만 합니다
ㅁ성명 : 김연아.
공백이 없는 한글로만 되어야 하고 글자 길이는 2글자 이상 6글자 이하이어야만 합니다
ㅁ성명 : 김연아
>회원가입 성공!<

===========>>메뉴<<============
1. 회원가입	2.모든회원조회	3.프로그램종료
================================
○ 선택하세요 ->1
아이디 :  qwerTr1!
ㅁ비밀번호 :  qwerTr1!
ㅁ성명 : 아리영
>회원가입 성공!<

===========>>메뉴<<============
1. 회원가입	2.모든회원조회	3.프로그램종료
================================
○ 선택하세요 ->1
>> 정원 마감되어 회원가입이 불가합니다. <<

===========>>메뉴<<============
1. 회원가입	2.모든회원조회	3.프로그램종료
================================
○ 선택하세요 ->2
--------------------------
아이디      비밀번호               성명	
--------------------------

dasddsa	qwerTr1!	이순신
addsa	 qwerTr1!	김연아
 qwerTr1!	 qwerTr1!	아리영

===========>>메뉴<<============
1. 회원가입	2.모든회원조회	3.프로그램종료
================================
○ 선택하세요 ->3

 ==== 프로그램 종료 ====


코드 풀이 >



public class Members {
    String id;
    String name;
    String passwd;
    public void printout() {
        System.out.println("----------------" +
                "아이디          비밀번호          성명" +
                id + "         " + passwd + "        " + name
        );
    }
    public boolean isTruePassword(String passwd) {
        if (passwd == null) return false;
        if (2 > passwd.length() && passwd.length() > 6) {
            System.out.println("공백이 없는 한글로만 되어야 하고 글자 길이는 2글자 이상 6글자 이하이어야만 합니다.");
            return false;
        }

        boolean flagUpper = false;
        boolean flagLower = false;
        boolean flagDigit = false;
        boolean flagSpecial = false;

        for (int i = 0; i<passwd.length(); i++) {
                char ch = passwd.charAt(i);
                if ('가' <= ch && ch <= '힣') return false;

                if (Character.isUpperCase(ch)) {
                    flagUpper = true;
                } else if (Character.isLowerCase(ch)) {
                    flagLower = true;
                } else if (Character.isDigit(ch)) {
                    flagDigit = true;
                } else {
                    flagSpecial = true; //특수문자
                }

            }

        return  flagUpper && flagLower && flagDigit && flagSpecial;
        //위의 값이 전부 true일때(&&) return true;  어느 하나라도 아니면 false
    }
}


public class MyUtil {
	// 입력받은 문자열에서 공백을 제거해주는 메소드 생성하기 
	public static String space_delete(String input_str) {
		
		String result = null;
		
		if(input_str != null) {
			result = "";
			for(int i=0; i<input_str.length(); i++) {
				char ch = input_str.charAt(i);
				if(ch != ' ') 
					result += ch; 
			}// end of for-------------------------
		}
		
		return result;
	}// end of public static String space_delete(String input_str)------
	
	
	// == 비밀번호가 규칙에 맞는지 틀리는지 알려주는 static 메소드 생성하기 == //
	/*
	   비밀번호 규칙은 비밀번호의 길이는 8글자 이상 15글자 이하이어야 하고,
	   또한 비밀번호는 영문대문자, 영문소문자, 숫자, 특수기호가 혼합되어야만 한다.
	   우리는 규칙에 맞으면 true 를 리턴해주고, 규칙에 틀리면 false 를 리턴하도록 만든다.  
	*/
	
	public boolean isCheakPasswd(String passwd) {
		if(passwd == null) return false;

		int length = passwd.length(); //패스워드의 길이를 저장
		if(length < 8 || length > 15) {
			return false;
		}
		//소문자,대문자,숫자,특수문자가 포함되어있는지 알아보기
		boolean flag_upper = false;
		boolean flag_lower = false;
		boolean flag_number = false;
		boolean flag_special = false;
		for (int i = 0; i<length; i++) {
			char ch = passwd.charAt(i); // ch의 char 하나씩 검사
			if('가'<= ch && ch <= '힣') {
				return false;
			}
			if(Character.isUpperCase(ch)) {
				flag_upper = true;
			} else if(Character.isLowerCase(ch)) {
				flag_lower = true;
			} else if (Character.isDigit(ch)) {
				flag_number = true;
			} else {
				flag_special = true;
			}
		}
		return flag_upper && flag_lower && flag_number && flag_special;
	}
    
    public class Main_members {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Members[] students = new Members[3];
        String select = " ";
        int mbr_cnt = 0; //멤버 숫자 세기
        do {
            System.out.println("=========>>메뉴<<========");
            System.out.println("1. 회원가입              2. 모든회원조회           3. 프로그램종료");
            System.out.println("=========================");
            System.out.println("ㅇ 선택하세요 >> ");
            select = MyUtil.space_delete(sc.nextLine()); //유저가 공백 입력했을 때 빼줌

            switch (select) { //입력한 select가 key
                case "1" :
                    // 아이디 입력 시작
                    if(mbr_cnt < students.length) {

                        String id = "";
                        outerId:
                        do { //중복된 아이디 검사
                            System.out.println("아이디를 입력하세요 :");
                            id = sc.nextLine();

                            if(id.trim().isEmpty()) {//빈 문자열인지 체크
                                System.out.println("경고: 아이디값을 다른 값으로 입력하세요");
                            } else {
                                for (int i = 0; i < mbr_cnt; i++) {
                                    if (id.equals(students[i].id)) { //아이디 값 비교(문자열비교는 equals
                                        //아이디의 값이 기존에 저장된 객체의 id와 같을 때
                                        System.out.println("중복된 아이디입니다. 다시 입력하세요.");
                                        continue outerId;
                                    }
                                }
                                break;
                            }
                        } while (true);
                        //비밀번호 입력 시작
                        String passwd = null;
                        do {
                            System.out.println("패스워드를 입력하세요 :");
                            passwd = sc.nextLine();
                            //패스워드 유효성 검사
                            if (!MyUtil.isCheckPasswd(passwd)) {
                                System.out.println("경고: 비밀번호는 8글자 이상 15글자 이하, 숫자, 소문자, 대문자, 특문이 포함되어야 함");
                            } else {
                                break;
                            }
                        } while (true);

                        //이름 입력 시작
                        String name = "";
                        //공백이 없는 한글로만 되어야 하고 글자 길이는 2글자 이상 6글자 이하이어야만 한다.
                        do {
                            System.out.println("이름을 입력하세요 :");
                            name = sc.nextLine();
                            boolean isName = true;
                            for (int i = 0; i<name.length(); i++) {
                                char ch = name.charAt(i);
                                if(ch == ' ') {
                                    isName = false;
                                } else if(!('가' <= ch && ch <= '힣')) {
                                    isName = false;
                                }
                            }
                            if(isName) {
                                break;
                            } else {
                                System.out.println("공백이 없는 한글로만 되어야 하고 글자 길이는 2글자 이상 6글자 이하이어야만 합니다.");
                            }
                        }while (true);
                        Members members = new Members(); //꼭 여기서 new로 생성을 해줘야 새 객체를 반복생성
                        members.id = id;
                        members.passwd = passwd;
                        members.name = name;
                        students[mbr_cnt++] = members;  //객체 배열의 방(객체)마다 mbr객체(member_me참조)를 하나씩 밀어넣어줌
                        break;
                    } else {
                        System.out.println("정원 마감되어 회원가입이 불가능 합니다.");
                        break;
                    }

                case "2" : // 출력
                    if(mbr_cnt == 0) {
                        System.out.println("가입한 회원이 없습니다");
                        break;
                    } else {
                        for (int i = 0; i<mbr_cnt; i++) {
                            students[i].printout();
                        }
                    }
                    break; //브레이크를 꼭 해줘야 디폴트가 나오지 않는다.
                case "3" :
                    break;
                default:
                    System.out.println("메뉴에 없는 숫자입니다.");
            }

        } while(!"3".equals(select));
        sc.close();
        System.out.println("프로그램을 종료합니다.");

    }

}









3. 학점&평균&등수 출력

요구 사항 >

코드를 입력하세요

연습 문제 >

코드를 입력하세요
profile
개발하는 심심이

0개의 댓글

관련 채용 정보