국비학원 4일차 : For문, While문, 로그인사이트

Digeut·2023년 2월 27일
0

국비학원

목록 보기
4/44

1. For 반복문

규칙이 있는 작업을 반복하는 '제어문'
일반적으로 반복 횟수가 정해져 있을 때 사용하는 반복문
배열의 길이만큼 사용 (반복할 길이가 정해져있지 않고 조건만 반복시 while 사용)
특정한 변수가 증감하며 조건에 부합하는 동안 반복하는 반복문

반복문을 사용하는 이유

// 길이가 5인 int 타입의 배열(intArray5)을 선언 및 생성
int[] intArray5 /*배열 선언*/ = new int[5]; /*배열 생성*/
//intArray5의 각 인덱스를 1~5까지 값을 초기화 //배열명[인덱스값] = 할당 값 ;
intArray5[0] = 1;
intArray5[1] = 2;
intArray5[2] = 3;
intArray5[3] = 4;
intArray5[4] = 5;

// 지금은 크기가 5라서 하나하나 다 적어줬지만, 이것보다 크기가 커지게 되면
// 하나하나 초기화 해주는게 쉽지않다!
// 되도록 코드가 중복되는걸 최소화 해주는게 좋다!

For 반복문

// 사용방법 :
// for(변수 선언 혹은 초기화 ; 조건 ; 증감식){ 실행할 코드 }

변수 선언 혹은 초기화 : 반복문을 위해 사용할 변수를 선언 혹은 초기화
조건 : 반복을 계속하기 위한 조건, 해당 조건이 true이면 반복, false면 탈출(종료)
실행할 코드 : 조건이 true일 때 실행할 코드

for (int index = 0/*시작값*/ /*실행a*/ ; 
	index < 5/*조건*/ /*실행b*/ ; 
    index++/*실행할 코드가 끝난다음 실행*//*실행c*/) { /*보통 i는 index를 나타낸다*/

//실행할 코드 /*실행d*/ 실행순서는 a b d c b d c b d c ... 순서

//intArray5[0] = 1;
//intArray5[1] = 2;
//intArray5[2] = 3;
//intArray5[3] = 4;
//intArray5[4] = 5;
//위의 코드들은 intArray5[index] = index + 1;의 규칙을 가진다

intArray5[index] = index + 1;
        }
System.out.println(intArray5); /*메모리 주소값 출력*/
System.out.println(intArray5[0]); //요소 값을 출력할때는 이렇게!
// for문의 경우 코드블럭에 오는 실행할 코드가 한 구문이면 {}를 제거할 수 있다.
for (int index = 0 ; index < 5 /*intArray5.length로도 가능, 배열의 길이*/ ; index++)
	intArray5[index] = index + 1;

For Each 반복문

배열의 요소값을 직접 읽고자 할 때 배열을 반복하면서
요소를 하나씩 복사해서 사용할 수 있음
실제 저장된 메모리 주소의 값이 변경되는게 아니라 복사된 값을 사용하는 것
배열의 요소를 꺼내오면서 사용하기 위해서 간단한 코드를 적기 위한 방법

// 사용 방법 : for (배열 '요소'의 데이터타입 변수명 : 접근(사용)할 배열) { 실행할 코드 }

For문과 For Each문의 차이

For문

for (int index = 0 ; index < 5 ; index++)
            intArray5[index] = index + 1;

/*식1*/for (int index = 0 ; index < intArray5.length ; index++) {
            System.out.println(intArray5[index]);
            intArray5[index] = 10; //직접 배열의 값을 바꾸는 것
        } //결과 1 2 3 4 5

for (int index = 0 ; index < intArray5.length ; index++) {
            System.out.println(intArray5[index]); }
         // 결과 10 10 10 10 10

For Each문

for (int index = 0 ; index < intArray5.length ; index++)
            intArray5[index] = index +1;

/*식2*/for(int number : intArray5) {
            System.out.println(number);
            number = 10; } //결과 1 2 3 4 5
            
for(int number : intArray5) System.out.println(number); 
		// 결과 1 2 3 4 5 

For문의 경우 식1에서 intArray5를 읽은다음 값을 전부 10으로 바꾸면
다음 출력시 intArray5값 모두 반복문을 통해 10으로 바뀌게 된다.

For Each문 식2에서 number를 10으로 바꿨지만 변하지 않는다
For Each는 배열의 값을 복사해서 접근하기때문에 변수의 값을 바꾸어도
기존 메모리 장소에 저장된 배열의 값에는 영향주지 않는다.
For each문은 배열을 가져다 read만 할수 있고 write는 할 수 없다.

2. While문

조건을 검사하고 해당 조건이 true일 경우 코드 블럭을 실행하는 반복문
(여기까진 if문과 유사) if문의 반복문 형태
반복 실행할 코드 블록이 종료되면 조건을 다시 검사하고 true면 반복, false면 탈출
일반적으로 반복 횟수가 정해져 있지 않을때 사용하는 반복문

사용방법 : while (조건) { 실행할 코드 }
int number = 0 ;

while(number < 20) { 
//while 문 내에서 조건의 변수가 변경이 일어나야 무한루프에 빠지지 않을수 있다
	System.out.println(number);
	//☆ while문에서는 조건에 사용되는 변수가 필수로 실행코드 내에서 변경이 이루어 져야한다!
	number++; //for문에서 index++하는것과 같다
}
while(true) { //무한하게 돌리게된다.
//continue : continue문을 만나면 코드블럭내에서 아래에 오는
// '모든 코드를 무시'하고 다시 조건을 검사
// 일반적으로 continue문은 조건문과 함께 사용된다.
// ☆ while문에서는 ! 조건문의 코드 블럭 내에 해당 변수를 변경시켜주는 코드가 존재 해야한다.
	if ((number %2) == 0 
    //number이 홀수인 경우 number %2 == 1은 무한루프에 빠지게 된다
    //짝수인경우의 조건으로 바꿔야 무한루프 안빠지게됨 */) { 
    //(number %2) == 1은 왜 무한루프에 빠지지?
	//(number %2) == 1의 경우 199일때 if 조건을 만족해서 number++가 되게 되고
	// 200은 이 if문 통과하고 36번 줄의 number++를 만나서 201이 된다.			
    //그러면if(number==200) break 가 될수없게되서 무한 루프!
		number++;
		continue;
	}
	System.out.println(number);
	number++;
	//break : 반복문의 코드 블럭을 강제로 졸료 시킬때 사용
	//일반적으로 break문은 조건문과 함께 사용된다.
	if(number==200) break; 
} //여기까지 끝나면 number = 200이다

Do While문

반복 실행할 코드를 무조건 한번 실행 한 후에 조건을 검사하는 반복문

// 사용 방법  : do {실행할 코드} while (조건) ;

do {
	System.out.println(number);
	number ++ ; //여기까지 끝나면 201
} while (number < 200); //false 값
	System.out.println(number); //while의 조건이 false이므로 number = 201

3. 로그인 구현

프로그램의 기본 3가지

Input 입력

Process 절차

정해놓고 따라가는게 절차
컴퓨터 켜기 -> 이클립스 찾기 -> 이클립스 실행
이 절차(Lv.0) 안에도 또 다른 절차(Lv.1)가 존재한다 (LV. n 은 얼마든지 증가가능)

Output 출력

실제 사용되는 프로세스

(단계 하나하나씩 생각하기)

회원가입

개인정보 입력 (Input) -> [ A -> B -> C -> D -> E ] -> 회원가입 성공/실패(Output)

조건
(필수) A 아이디 비밀번호 *주소 ->조건들이 맞아야 성공, 아니면 실패
B 비밀번호확인(=비밀번호) ->조건들이 맞아야 성공, 아니면 실패
C 비밀번호 패턴 ->조건들이 맞아야 성공, 아니면 실패
D 아이디 중복확인 ->조건들이 맞아야 성공, 아니면 실패
E ->데이터 저장 (성공 / 실패)

로그인

아이디, 비밀번호 입력 (Input) -> [ A -> B ] -> 로그인 성공/실패(Output)

조건
A 모두 입력 여부 -> 입력되어있으면 성공, 아니면 실패
B 로그인 정보 일치 -> 비교 성공, 아니면 실패

백엔드가 하는 작업의 대부분 : C.R.U.D.
C : creat / R : read / U : update / D : delete

로그인 구현

		final String ID = "qwer1234" ; //상수는 대문자로!
        final String PASSWORD = "qwer1234" ; 
        //데이터를 비교할 DB가 없기때문에
        //지금은 지정한 상수와 비교를 해서 로그인 구현

        //1. 사용자로부터 아이디와 비밀번호 입력받음
        Scanner scanner = new Scanner(System.in);
        System.out.println("아이디와 비밀번호를 입력하세요.");
        String userId = scanner.nextLine();
        String userPassword = scanner.nextLine();

        //2. ☆모두 입력 여부 확인 , 입력 안되었다면 모두 입력하라고 출력 
        //(아이디와 비밀번호 입력했는지 검증)
        // userId 와 userPassword 변수가 비었는지 확인
        // 문자열에서 값이 비었는지 확인하는 기능(메서드)이 존재
        // string(변수).isEmpty() : 비었으면 true, 아니면 false
        
//		if (userId.isEmpty()) { //큰 흐름에서 벗어나는게 if에서 실행되게 하면 깔끔
//			System.out.println("모두 입력하세요.");
//			//코드블럭내의 코드를 종료시키려면 break, 
			//함수 스레드 자체를 종료는 return -> 클래스할때 설명
//			return;
//		}
//		if(userPassword.isEmpty()) {
//			System.out.println("모두 입력하세요.");
//			return;
//		}
		//↑위 코드 주석처리한 이유
        //입력을 검증하는건 프로세스가 하나! 그리고 코드가 중복되는걸 피해야한다.
        //->논리연산자 사용해서 하나로 만들기 &&는 곱하기연산, ||는 더하기연산
        if(userId.isEmpty() || userPassword.isEmpty()) { 
        
        //같은 라인에 있다면 or로 묶어주기(세로정렬에서)
            System.out.println("모두 입력하세요.");
            return;
        }

//		if(userId.isEmpty()) {
//			if(userPassword.isEmpty()) {
//			System.out.println("모두 입력하세요.");
//			return;
//		} 
		//↑위 코드 주석처리한 이유
        //입력을 검증하는건 프로세스가 하나! 그리고 코드가 중복되는걸 피해야한다.
        //이런식의 조건은 같은 라인의 조건이 아니기때문에 and로 묶어서 표현해야 한다.

        //변수에 저장한다 = 메모리 공간에 저장 (참조변수는 메모 주소를 가진다)

        // 3. 사용가 입력값과 저장된 값이 같은지 '검증'(if로 해야된다) 
        //저장소 값(맨위에서 지정한 상수)과 실제 입력값 비교
        // string.equals(비교대상) : 같으면 true, 다르면 false
        
        if(userId.equals(ID)/*== ID*/ && userPassword.equals(PASSWORD)) { 
        // ==의 경우 기본 데이터타입에서 사용, String은 기본 데이터 타입이아니다! 
        // ==말고 equals 사용.
            System.out.println("성공");
        } //정상결과를 if안에 넣으면 안된다! 프로세스상으로는 실패..!! → 다음시간에
profile
개발자가 될 거야!

0개의 댓글