나의 수업일지

인천 일보 아카데미 5일차 []배열 알아보기

2023. 2. 27. 21:11
  • 로그인_로그아웃_만들기
       	!! 여기서 하나라도 이해 못하는 부분이 있다면 1일차부터 다시 복습해야함 !!
        !! 여기서 하나라도 이해 못하는 부분이 있다면 1일차부터 다시 복습해야함 !!
       
        > 사용자가 입력 가능하게 하는 scanner
        Scanner sc = new Scanner(System.in);
	
    	>사용자 정보와 while문에 넣을 블리언 변수를 정리
        String name = "guping";
        String id = "guping";
        String pw = "1234";
        boolean run = true;
        boolean run1 = false;
        boolean run2 = false;
	
    	>전체적인 부분을 반복하는 while문
        while (run) {
        	로그인에 성공할 시 run1 에 true;를 대입하게하여 로그인 시 작동됌
            while (run1) {
                System.out.println("1.비밀번호 변경 2.로그아웃");
                String loginmenu = sc.next();
                run2=true; < 아래의 while을 작동하게 하기위함
                while (run2) { 
                    if (loginmenu.equals("1")) { < 1번을 입력한 경우 작동하는 if문
                        System.out.print("비밀번호 확인>");
                        String pw1 = sc.next();
                        if (pw.equals(pw1)) { < 기존 pw가 확인 pw를 넣은 pw1과 같다면 작동
                            System.out.print("변경 할 비밀번호 입력>");
                            String pw2 = sc.next();

                            if (pw2.equals(pw)) { < 기존 pw가 변경 할 비밀번호 pw2를 넣은 변수와 같다면 작동
                                System.out.println("같은 비밀번호로 변경 불가!\n");
                                continue;
                            } else if (pw2.equals(pw2)) { < 변경할 비밀번호를 넣은 pw2가 기존 pw와 다르면 작동
                                System.out.print("변경 할 비밀번호 확인>");
                                String pw3 = sc.next();
                                if(!(pw3.equals(pw2))) { < 변경할 비밀번호를 넣은 pw2가 변경 확인한 비밀번호 pw3과 다르면 작동
                                    System.out.println("변경 할 비밀번호를 확인해주세요\n");
                                    continue;
                                }else { <위에서 변수를 차단하는 if문을 작성했기에 기존 비밀번호와 변경할 비밀번호가 다르면 변경할 비밀번호 확인을 마치면 작동
                                System.out.println(name+"님 비밀번호 변경 성공!\n다시 로그인해주세요");
                                pw = pw3; < 기존 pw에 변경한 비밀번호를 대입하여 변경되게함
                                run2 = false; < 이제 사용하지 않는 while문은 false를 대입하여 반복을 멈춤
                                run1 = false; < 이제 사용하지 않는 while문은 false를 대입하여 반복을 멈춤
                                }
                            }
                        } else if (!(pw.equals(pw1))) { < 비밀번호 확인창에서 기존 비밀번호를 틀렸을 경우
                            System.out.println("비밀 번호가 틀립니다");
                            continue;
                        }
                        run2 = false;
                    } else if (loginmenu.equals("2")) { < 로그인 후 로그아웃을 눌렀을 경우
                        System.out.println(name + "님 로그아웃 성공!");
                        run2 = false;
                        run1 = false;
                    }
                }
            }
            System.out.println("====회원 가입====");
            System.out.println("1.회원가입 2.로그인 3.종료");
            System.out.print("메뉴 입력>");
            String menu = sc.next();

            if (menu.equals("1")) { < 초기 화면에서 1번 회원 가입을 누른경우 작동
                System.out.print("이름 입력>"); < 회원가입 정보를 저장하기 위한 변수 설정
                name = sc.next();
                System.out.print("아이디 입력>");
                id = sc.next();
                System.out.print("비밀번호 입력>");
                pw = sc.next();

                System.out.println(name + "님 회원가입을 환영합니다!");
            } else if (menu.equals("2")) { < 초기 화면에서 2번 회원가입을 누른 경우
                System.out.print("아이디 입력>"); <저장되어 있는 아이디와 비밀번호를 대조하기 위한 변수를 따로 설정
                String loginid = sc.next();
                System.out.print("비밀번호 입력>");
                String loginpw = sc.next();
                
                if (loginid.equals(id) && loginpw.equals(pw)) { < 저장되어 있는 id,pw와 입력한 id , pw가 맞다면 작동
                    System.out.println(name + "님 로그인 성공!");
                    run1 = true;
                } else { << 저장되어 있는 id,pw와 입력한 id , pw가 틀리다면 작동
                    System.out.println("로그인 실패");
                }
            } else if (menu.equals("3")) { < 메뉴 3번 종료를 누르면 작동
                System.out.println("시스템을 종료합니다");
                run = false; < 반복문을 false;로 대입하여 반복문을 멈춤

            }else { < 그밖에 1~3번이 아닌 번호를 누른 경우
                System.out.println("없는 메뉴입니다");
            }
        }
        
        > 주말이 지났기 때문에 복습겸 계산기 만들어보기
        > scanner로 사용자가 텍스트를 입력할 수 있게 하였음
        > 사용자 이름 아이디 비밀번호가 문자일 수 있기 때문에 String 변수를 사용
        > 테스트를 위해 이름 아이디 비번을 채운 모습
        > 반복문 while을 이용하여 전체적으로 반복하게 만들었고 저번주에 배운 내용을 토대로 작성함

 

  • 로그인_로그아웃_선생님 예시
	!! 선생님이 작성한 예시만 꼭 읽어보기 !!
    !! 선생님이 작성한 예시만 꼭 읽어보기 !!

        Scanner sc = new Scanner(System.in);
        String name = "";
        String id = "";
        String pw = "";
        boolean loginOk = false;
        while(true) {
            if(loginOk) {
                System.out.println("1.비밀번호 수정 2.로그아웃 0.종료");
            }else {
                System.out.println("1.회원가입 2.로그인 0.종료");
            }
            System.out.print("메뉴선택> ");
            int menu = sc.nextInt();

            if(menu == 1) {
                if(loginOk) {
                    System.out.print("수정할 비밀번호> ");
                    pw = sc.next();
                    System.out.println("비밀번호 수정 완료");
                }else {
                    System.out.print("이름입력> ");
                    name = sc.next();
                    System.out.print("아이디입력> ");
                    id = sc.next();
                    System.out.print("비밀번호입력> ");
                    pw = sc.next();
                    System.out.println(name+"님 회원가입을 축하드립니다");
                }
            }else if(menu == 2) {
                if(loginOk) {
                    loginOk = false;
                    System.out.println("로그아웃 성공");
                }else {
                    System.out.print("아이디입력> ");
                    String loginId = sc.next();
                    System.out.print("비밀번호입력> ");
                    String loginPw = sc.next();

                    if(loginId.equals(id) && loginPw.equals(pw)) {
                        System.out.println("로그인 성공");
                        loginOk = true;
                    }else {
                        System.out.println("로그인 실패");
                    }
                }
            }else if(menu == 0) {
                break;
            }else {
                System.out.println("다시입력");
            }
            System.out.println();
        }
        System.out.println("프로그램 종료");
    }

}

 >작성한게 맞는지 대조하기 위한 선생님의 예시문

 

  • 배열_예제
		!! 배열의 이해를 돕는 예시문 배열은 아주 어렵기 때문에 반복적인 학습 필요!!
		!! 배열의 이해를 돕는 예시문 배열은 아주 어렵기 때문에 반복적인 학습 필요!!

		String name1 = "홍길동";
		String name2 = "이순신";
		String name3 = "심청이";
		
		System.out.println(name1);
		System.out.println(name2);
		System.out.println(name3); > 지금까지는 이렇게 각각의 변수를 만들고 대입하여 
        							>프린트했음을 보여주는 예시
		
		!! 배열을 사용할 경우의 예시 !!
		String[] name = new String[3]; // 문자열이 들어갈 수 있는 배열3칸 만들기		
		!! String에 3칸짜리 배열을 만들었음
        
		name[0] = "배열홍길동"; // 배열의 칸을 index라고 하는데 index는 칸 번호는 0부터 시작한다
		name[1] = "배열이순신";
		name[2] = "배열심청이";
		name[1] = "변경"; //이런 경우 "배열이순신"이 아닌 "변경"이 출력된다
		!!각각의 배열에 배열 홍길동 , 이순신 , 심청이를 넣어둔 모습

		System.out.println(name[0]);
		System.out.println(name[1]);
		System.out.println(name[2]);
        !! 이후 출력해보면 변수를 각각 설정하지 않아도 출력이 잘 되는걸 확인할 수 있음
        
		
		int[] i = new int[10]; //정수가 들어갈 수 있는 배열 10칸 만들기
//		int i[] = new int[10]; 이렇게 작성해도 상관없음
		//int[] i = { 34. 123 .94 ....} 정해진 배열에 만들면서 추가할때
        >배열문의 작성 예시 3가지
        
		i[0] = 34;
		i[1] = 34;
		i[2] = 34;
		i[3] = 34;
		i[4] = 34;
		i[5] = 34;
		i[6] = 34;
		i[7] = 34;
		i[8] = 34;
		i[9] = 34;
//		System.out.println(i[1]); >하나씩 출력할 때

		>한번에 모두 출력할 때
		for(int j = 0; j<i.length;j++) { // length는 길이를 뜻하고 i는 10칸이기 때문에 10으로 계산된다
			System.out.println(i[j]); // 이렇게하면 0~9까지 한번에 출력 가능하다
            					j가 1식 증가하며 각칸의 번호 역활을 해줌 해당 번호칸을 출력하는것
		}	
	}
}

 

  • 배열_응용_풀어보기
		 문제) 문자열 배열에 문자열 5개를 할당하고, 전체 출력
		
		 방법1)
		String [] i = new String[5];
		
		i[0] = "2조";
		i[1] = "guping1";
		i[2] = "guping2";
		i[3] = "guping3";
		i[4] = "guping4";
		
		for(int j = 0 ; j < i.length;j++) {
			System.out.println(i[j]);
		}
        
		>String 변수 배열 i의 5칸 안에 이미 변수가 할당 되어 있음
		>for문을 이용하여 한번에 출력하는 경우 변수 j를 선언 0을 대입하여 배열 i의 길이보다 작다면
		> j를 1씩 증가하게 하였음 이후 String 변수 배열 i의 칸번호에 j를 대입
		> 1씩 증가하며 각칸을 출력함
		
		 문제) int배열 10칸에 값을 할당하고 , 총 합 출력
		int [] sum = {2,34,53,23,5,2,6,75,4,5};
		int j = 0;
//		System.out.println(sum.length);
		
		for(int i = 0 ; i < sum.length;i++) {
//			System.out.println(sum[i]);
			j = j+sum[i];
			
		}
		System.out.println(j);
        
        > 먼저 int배열 sum을 작성함
        > 배열 sum의 합을 저장할 공간인 int변수 j에 0을 저장
        > for문을 이용하여 i가 sum의 길이보다 작으면 i를 1씩 증가하게 하였음
        > 이렇게 for문의 조건에 설정한 변수 i를 sum의 숫자 역활을 하게 만듬
        > 이후 j = j+sum[i]를 이용하여 sum의 각칸의 수가 변수 j에 합쳐지게 만듬
        > for문 밖에서 j를 출력하게 함으로 합을 출력
        
        // 문제) 짝수번째 index의 합을 구하기
		int [] sum = {2,34,53,23,5,2,6,75,4,5};
		int j = 0;
//		System.out.println(sum.length);
		
		for(int i = 0 ; i < sum.length;i=i+2) {
//			System.out.println(sum[i]);
			j = j+sum[i];
			
		}
		System.out.println(j);
        
        > 변수 배열을 조금 이해하였다면 아주 쉬운 문제임
        > 배열의 짝수 칸 수의 합을 구하는 방법은 배열의 칸을 불러올때 사용하는 i를 2씩 증가시켜
        > j 에 합쳐지게 만들면 됨 이후 j를 for문 밖에서 출력하여 합을 구함
        
        // 문제) 값이 짝수인것 더 하기
		int [] sum = {2,34,53,23,5,2,6,75,4,5};
		int j = 0;
//		System.out.println(sum.length);
				
		for(int i = 0 ; i < sum.length;i++) {
			if(sum[i]%2 == 0) {
//			System.out.println(sum[i]);
			j = j+sum[i];
			}
		}
		System.out.println(j);
        
        > 먼저 변수 배열 안의 수를 가져와야 하기 때문에 for문을 작성함
        > for문 안에서 if문으로 조건을 걸고 sum[i]가 2로 나누었을때 나머지가 0인를
        > 변수 j에 저장하게 만듬 이후 for문 밖에서 변수 j를 출력함으로 짝수의 합을 구함
        > i는 1씩 변수 배열 sum의 길이 만큼 증가하며 배열 칸의 숫자를 가져오기 때문에 구해지는 것
        
        //문제 변수 배열 num에 1~100까지 수를 넣고 출력
		int[] num = new int[100]; 
		for(int i  = 0  ; i < num.length ;i++ ) {
			num[i] = i+1;
		}
        
        > 배열 num을 100칸으로 만들고 for문을 이용하여 하나씩 실행하게 하였음
        > 이렇게 하나씩 증가하는 배열 num에 i+1을 이용하여 대입
        > 이렇게 배열 num의 칸을 하나씩 열며 1씩 증가하는 i를 대입함
		
		for(int j = 0 ; j < num.length ; j++) {
			System.out.println(num[j]);
		}
        
        > 이후 각각 출력을 진행해야 하기 때문에
        > for문을 한번 더 사용하여 1씩 증가한 i의 수가 더해진 배열 sum을 출력함
        
        // 문제)num 1~10까지 입력받고 출력
		Scanner sc = new Scanner(System.in);
		
		int[] num = new int[10];
		
		for(int num1 = 0 ; num1 < num.length; num1++) {
			System.out.println("숫자를 입력해주세요");
			num[num1] = sc.nextInt();
			
		}
		for(int num2 = 0 ; num2 < num.length ; num2++) {
			System.out.println(num[num2]);
		}
        
        > 먼저 scanner를 이용하여 사용자가 입력이 가능하게함
        > for문을 이용하여 num1이 배열 num보다 작다면 반복하여 num1이 1씩 증가하게함
        > 프린트를 이용하여 사용자가 입력 공간을 찾을 수 있게 함
        > 받은 입력을 num[num1]을 이용하여 각각 대입하게 하였음
        > num1은 1씩 증가하며 각칸에 사용자가 입력한 수를 대입함
        > 이후 for문을 새로 만들고 for문의 안에서 프린트하여 합을 구하였음
        
        // 문제) 10칸짜리 정수 배열 선언 후 값을 입력 받고 , 값이 3의 배수의 합 출력
		
		Scanner sc = new Scanner(System.in);
		int[] num = new int[10];
		int j = 0;
		for(int i = 0 ; i < num.length ; i++) {
			System.out.println("숫자를 입력하세요>");
			num[i] = sc.nextInt();
		}
		for(int h = 0; h <num.length ; h++) {
			if(num[h]%3 == 0) {
				j += num[h];
			}
		}
		System.out.println(j);
        
        > scanner로 사용자가 입력이 가능하게 하였음
        > int 배열문 num을 선언하고 칸을 10칸으로 줌
        > 3의 배수의 합을 대입할 int변수 j를 선언함
        > for문을 이용하여 배열 num의 길이만큼 반복하며 1씩 증가하는 변수 i를 만들고
        > 그 반복동안 사용자가 숫자를 입력 할 수 있게하였음
        > 이렇게 입력받은 숫자를 배열 num에 i를 이용하여 각 칸에 대입하였음
        > 이후 for문을 하나 더 만들고 1씩 증가하는 변수 h를 선언 1씩증가하며 num의 숫자칸을 여는 방식으로
        > 조건문 if를 이용하여 대입된 숫자가 3으로 나누었을때 나머지가 0인 수를
        > 변수 j에 더해지게 하였음 for문의 밖에서 출력함으로 j에 더해진 합을 출력함
        
        // 문제) 10칸짜리 정수 배열 선언 후 값을 입력 받고 , 입력받은 것중 3의 배수의 갯수 5의 배수의 갯수 3,5가 겹치는 배수의 갯수
		
		Scanner sc = new Scanner(System.in);
		int[] num = new int[10];
		int con1 = 0;
		int con2 = 0;
		int con3 = 0;
		
		for(int i = 0 ; i < num.length ; i++) {
			System.out.println("숫자를 입력해 주세요");
			num[i]=sc.nextInt();
			
		}
		for(int j = 0 ; j  < num.length; j++) {
			if(num[j] % 3 == 0 && num[j] % 5 == 0) {	
				con1++;
			}
			if(num[j] % 3 == 0) {
				con2++;;
			}
			if(num[j] % 5 == 0) {
				con3++;
			}
			
		}
		System.out.println("3과5의 배수에 겹치는 갯수는" + con1 +"개 입니다" );
		System.out.println("3의 배수 갯수는"+con2 +"개 입니다");
		System.out.println("3의 배수 갯수는"+con3 +"개 입니다");
        
        > 이문제를 풀때 알아둬야 하는것은 갯수도 합이기 때문에 밖에서 따로 변수를 선언해주는게 좋음
        > 풀이에서는 각각 con1 , con2 , con3으로 설정하였음
        > for문을 이용하여 1씩 증가하는 i를 사용해 배열 num에 사용자가 입력한 수를 대입하게 하였음
        > for문을 한번 더 작성하여 1씩 증가하는 j를 사용해 num안의 수가 3 ,5 의 배수인지 확인
        > 조건문 if를 사용하여 해당한다면 각각 정해놓은 con변수가 1씩 증가하게 하였음
        > 이후 for문 밖에서 출력하여 각 con의 합을 구하였음
        
        
		// 문제) 10칸의 정수배열을 만들고,반복하면서 입력을 받는데 짝수만 배열에 저장 후 출력 (짝수만 10개 입력 받을 때 까지 계속 반복)
		Scanner sc = new Scanner(System.in);

		int[] num = new int[10];
		
		for(int i = 0;i<num.length;i++) {
			System.out.println("숫자 입력>");
			int number = sc.nextInt();
			if(number % 2 == 0) {
				num[i] = number;
			}else {
				i--;
			}
		}
		for(int i =0; i<num.length; i++) {
			System.out.println(num[i]);
		}
        
		> 수업중 이부분에서 머리가 고장남
        > 먼저 int 배열을 만들어주고 10칸을 설정함
        > for문을 이용하여 변수 i가 num의 칸수만큼 1씩 증가하며 반복하게 만듬
        > 숫자 입력칸을 만들고 입력 받은 수를 변수 number에 저장함
        > if문을 이용하여 입력한 수를 대입받은 변수 number 가 2로 나누었을때 나머지가 0이라면
        > 배열 num에 대입하게 만듬
	> 만약 나머지가 1이 아니라면 i를 1씩 빼며 증가하지 않게 함으로 짝수를 10번입력하지 않으면
        > for문의 조건이 계속 참이게 만듬 이후 for문을 하나 더 만들고
        > 그 안에서 출력함으로 입력받은 짝수를 각각 출력하였음
        
		// 문제) 10칸의 정수배열을 만들고, 반복하면서 입력을 받는데 짝수만 배열에 저장 후 출력
		Scanner sc = new Scanner(System.in);
		int[] num = new int[10];
		int j = 0;

		while (j < 10) {
			System.out.print("숫자입력> ");
			int number = sc.nextInt();

			if (number % 2 == 0) {
				num[j] = number;
				j++;
				
			}	
		}
		for (int i = 0; i < num.length; i++) {
			System.out.println(num[i]);
		}
        
        > 위와 같은 문제임 하지만 for문이 아닌 while을 이용하여 문제를 풀어야함
        > 변수 j에 0을 대입하여 while 문안에 변수 j가 10보다 작다면 무한히 반복하게함
        > 이후 사용자가 수를 입력할 공간을 만들고 변수 number에 저장함
        > 조건문 if를 이용하여 number에 대입된 수가 2로 나누었을때 나머지가 0이라면
        > 변수 j를 1씩 증가시킴 배열 num에 j를 넣어 1씩 증가하며 짝수인 number가 대입되게 if문안에 작성
        > 이렇게 짝수가 10번 입력되면 j는 10과 같아지기 때문에 반복문을 빠져나오고
        > 밖의 for문의 안에서 출력하여 배열 num의 안에 있는 수를 각각 출력하게 하였음

 

'나의 수업일지' 카테고리의 다른 글

인천 일보 아카데미 8일차 메소드로 만들어보기/ArrayList 알아보기  (0) 2023.03.05
인천 일보 아카데미 7일차 클래스_필드_메소드_오버로딩  (0) 2023.03.02
인천 일보 아카데미 (주말 숙제)  (0) 2023.02.27
인천 일보 아카데미 4일차 up&down게임_만들기 / 숫자 랜덤 출력  (0) 2023.02.24
인천 일보 아카데미 3일차 배운 변수와 문법을 사용하여 만들어보기  (0) 2023.02.23
'나의 수업일지' 카테고리의 다른 글
  • 인천 일보 아카데미 8일차 메소드로 만들어보기/ArrayList 알아보기
  • 인천 일보 아카데미 7일차 클래스_필드_메소드_오버로딩
  • 인천 일보 아카데미 (주말 숙제)
  • 인천 일보 아카데미 4일차 up&down게임_만들기 / 숫자 랜덤 출력
GUPING
GUPING
안녕하세요 개발자를 꿈꾸는 GUPING 입니다
GUPING
개발자를 꿈꾸는 GUPING
GUPING
전체
오늘
어제
  • 분류 전체보기 (89)
    • 나의 수업일지 (88)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 버튼2가지이벤트
  • Ajax
  • 파일이름가져오기
  • 여러사진프리뷰
  • 지식인
  • 파일이름(다중)
  • 수정
  • 검색
  • 클래스 이름 변경
  • 검색결과페이징
  • 페이징Controller
  • 버튼 이벤트 변경
  • 네이버
  • 로그인form
  • 개힘드렁
  • 답변 채택
  • naver
  • Paging
  • 버튼 이벤트 함수 변경
  • 로그인 경고문
  • realative
  • 로그인게시판
  • 업로드파일이름출력
  • 파일 이름 가져오기
  • 페이징
  • 다중프리뷰
  • pagingAjax
  • PAGE
  • 틀만들기
  • 삭제

최근 댓글

최근 글

hELLO · Designed By 정상우.
GUPING
인천 일보 아카데미 5일차 []배열 알아보기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.