본문 바로가기

코딩공부일지/수업 review

[Java] 조건문과 반복문

Part1 조건문

 

1. if 문

if(조건식) { 조건식이 true일 경우 실행될 코드 }
==> 조건식의 결과가 true 일 경우 : {}(중괄호) 내부 코드 실행 
==> 조건식의 결과가 false 일 경우 : {}(중괄호) 안의 코드를 건너 뜀

* 조건식 활용 시에는 어떤 순서로 조건문을 쓸 지 고민해야함. 많이 사용될 구문 순으로 코드를 짜서 가능하면 빠르게 if문을 빠져나가도록 설계해야 함 if 문 작성시 가장 빨리 if문을 빠져나갈 수 있는 방향으로 설계 

 

2. if - else 문

if (조건식) {  조건식이 true일 때 실행할 코드 - 1 *
}  else  { 조건식이 false일 경우 실행할 문장 - 2 * }
조건식 결과 t => 1 수행
 조건식 결과 f => 2 수행

*else블럭은 생략가능함

 

3. if - else if

* if(조건식1) { * 조건식1이 t일 경우 수행 문장 *
} else if (조건식 2) { * 조건식2가 t일 경우 수행 문장 *
} else if (조건식 3) { * 조건식3가 t일 경우 수행 문장 *
} else if (조건식 4) { * 조건식4가 t일 경우 수행 문장 *
......
} else { * 상기 조건이 모두 false일 경우 수행 문장 } 
*else블럭은 생략가능함

 

 

4. switch문

 
switch (조건식) { // case 정수, 문자, 문자열 : 실행할코드 ;
case 값1 :  실행할코드 1;
	break; // switch영역 탈출 
    
 case 값2 : 실행할코드 2; 
	 break; // switch영역 탈출 
     
 case 값n : 실행할코드 n;
	break; // switch영역 탈출 * * 
    
 default :  //실행코드 (else와유사)

 

 

 

// 주민번호 입력 후 성별 판별
// 사용자로부터 주민번호 입력받기 ->xxxxxx-0xxxxxx
// 주민번호를 입력받아서 남성(1,3) / 여성(2,4)
 // 사용자로부터 주민번호 입력받기 : xxxxxxx-1/2/3/4xxxxxxx

	// 1) if 문	
		public void method1() {
			Scanner sc = new Scanner(System.in);
			
			System.out.println("주민등록번호를 입력하세요 (\"-\"포함))");		
            // 문자열 내 쌍따옴표 쓸 때에는 ( \"  \") 사용
			String idNum = sc.next();
			char gender = idNum.charAt(7);
				if (gender == '1' || gender == '3') {           
                // 비교연산자 사용할 때 변수 양쪽 다 넣는거 잊지마!! 
                // (gender 양쪽에 두 번 써야한다구)
							System.out.println("당신은 남자입니다");
				} else if (gender == '2' || gender ==  '4') {
					System.out.println("당신은 여자입니다");
			
				} else { System.out.println("존재할 수 없는 성별입니다");
	
				}
		}
        
	//	  2) switch문
		public void method2() {
			Scanner sc = new Scanner(System.in);
			
			System.out.println("주민등록번호를 입력하세요( \"-\"포함))");
			String idNum = sc.next();
			char gender = idNum.charAt(7);
			switch (gender) {
			
			case '1' :  case '3' : 
				System.out.println("당신은 남자입니다");
					break;
			case '2' :  case '4' : 
				System.out.println("당신은 여자입니다");
				break;
			default: 		
				System.out.println("존재할 수 없는 성별입니다");		
			
		}

 

// 예제2

// 나이를 입력받고 어린이, 청소년, 성인 판단
// 어린이: 0-13
// 청소년: 14-19
// 성인: 20++
// - : 외계인

 

	 public void method3() {
		Scanner sc = new Scanner(System.in);
		System.out.println("나이를 입력하세요");
		int age = sc.nextInt();
		if (age >= 20) {              
			System.out.println("성인입니다");
		} else if (0 <= age && age  <= 13) {                
        // && 오왼 양쪽으로 변수 두 번 쓰는 것 잊지마!!
		   	System.out.println("어린이입니다");		
		} else if (14 <= age && age  <= 19) { 
		  	System.out.println("청소년입니다");		
		} else { System.out.println("입력불가한 나이입니다");		}

 

 

 

 

Part2 반복문

1. for문

- 초기식; 조건식; 증감식 세 가지로 구성
* ;; 각각 세미콜론으로 구분

for( 초기식;  조건식(boolean) ; 증감식 )  {    // * 조건식을 만족하는 동안 반복할 문장
}
	
	// i의 값이 1에서 시작, 5와 같아질때까지 1씩 증가
	for (/*1번--for문실행 첫번째만*/ int i =1;  
        // 변수는 스코프({})내부에서만 살아있을 수 있음 , 
        //이후 사용시 에러 (메모리에서 사라짐)
		/*2번*/ i<=5;
		/*4번--for문블럭 끝나면 무조건 증감식*/ i++)
	{ /*3번: for문의 코드블럭 내부 */
		System.out.println(i + "번반복");
	} 	// 조건식이 f인 순간 for문블럭 탈출
	
}

     * *메모리 그리면서 해보기! 

 

- 초기식: 반복문이 시작될 때 "초기에 단 한번만 실행되는 구문"!
              반복문 사용 변수를 선언 및 초기화하는 구문 => 자료형 변수명 = 값; *
- 조건식: 반복문이 실행될 조건을 작성하는 구문 
* 조건식이 t => 반복 실행,
* 조건식이 f => 반복을 멈추고 탈출 (for문의 } 다음으로 이동)
- 증감식: "반복문을 제어하는 변수의 값(제어변수)"을 증감시키는 구문
* 보통 초기식에서 선언된 변수로 증감식 작성

   일반적으로 증감연산자가 사용됨 i++ i--

 

//for(int i=0; i<30 ; i++) {
// 출력형식: x번째 반복입니다 (1부터 50까지)
// 10번째 반복마다  +☆찍기

		public void forEx1 () {
			for (int i=1; i <= 50 ; i++ ) {  
            // for문 초기식 선언시 데이터타입 빼먹지마!!!! (int !!! i)
				if (i % 10 != 0) {
					System.out.println(i+"일째 공부중입니다");
				} else { System.out.println(i+"일째 공부중입니다 ★"); }							
			}	//for 문 끝
		} // 메서드 끝

 

 

// 구구단 출력
//  1 x 1    1 x 2  1 x 3  1 X 4  
//   2 X 1   2 X 2  2 X 3
//   3 X 1   3 X 2  3 X 3
// 중첩의 for 문      for(  앞숫자도 1씩 증가  (for (앞숫자불변 * 뒷숫자 1씩증가) )

 

		public void forEx2 () {
			for (int j=1; j <= 9; j++) {
				for (int i=1; i <= 9; i++) {
					System.out.println(j+ " X " +i+ " = " +j*i);
				}							
			}
		}

// 사용자에게 단을 입력받아서 구구단 출력

		public void forEx3 () {
			Scanner sc = new Scanner(System.in);
			System.out.println("1~9단 중 출력을 원하는 구구단의 단을 입력하세요");
			int dan = sc.nextInt();
			for (int i=1; i <= 9; i++) {
				System.out.println(dan+ " X " +i+ " = " +dan*i);
			}	
		}

2. while문

*  초기식; 필수는 아님
* while(조건식)  { // 반복 수행될 문장; 
			증감식; 필수아님  }

괄호 내 조건식이 true일 경우 해당(a)구문을 반복실행 
* while(true){ } => 무한반복, 무한반복에 주로 while문을 씀 
==> 반복의 횟수를 명확하게 알 때: for문 
==> 반복의 횟수를 모를 때: while문

 

 

3. do -while문

초기식; (생략가능)
  do {
  
 증감식; (생략가능)
 
   } while (조건식) ;

-   while문은 처음 수행시에도 조건식 검 사결과가 t여만 실행
-  do- while은 첫 실행은 별도 조건검사 없이 무조건 실행, 이후부터는 조건검사 결과에 따라 실행

 

 

4. 랜덤한 숫자 구하기 (math.random -->math클래스의 random 메서드)

// random() 결과값: 0.0~0.99999..
Math.random(); //
(.)=>참조연산자 (A클래스의 b 메서드 부를 때: A.b(); )
==> Math클래스는 따로 객체생성할 필요가 없음

 

일정한 범위 내의 랜덤한 정수값을 얻을 경우
(int)(Math.random()*몇개의 랜덤값) + 시작수

1단계 : random메서드 호출
2_1단계: random*10
2_2단계 : int형 강제형변환
2_3단계: ++1

 

// 로또_ver1 
// 번호 범위: 1~45까지 중에서 
//         6개 선택

	public static void lottoVer1 () {					
    // 메소드명 입력하고 () 적는것 잊지마!!
			for (int i=0 ; i < 6 ; i++ ) {
				System.out.println((int)(Math.random()*45)+1);
			}				
		}

 

 

Part3 Break, Continue (반복문 관련)

1. Break문

  - break문을 만나는 순간 가장 가까운 반복문(for, while)을 빠져나감

     (해당반복문이 끝나는 지점으로 이동)
  - 해당 break문이 속해있는 반복문 *****한 겹만****** 빠져나감 
    * switch문 case 내부 break와 다른 개념 (switch문의 경우 해당 switch문을 빠져나가는 용도) 

 

 

2. Continue문

   - continue를 만나면 그 뒤 어떠한 구문이 있어도 실행하지 않고 pass한 후,

     가장 가까운 반복문으로 되돌아감(**증감식부분으로)  
 

 

 

// 1~100까지 짝수 더하기 - if문/ if -continue문// while문 

// 1 - if 문만 사용

		public void ifEx1() {
			int sum = 0;
			for (int i=1 ; i <= 100; i++) {
				if ( i % 2 == 0) {
					sum += i;		
				} 
			}
				System.out.println("합계: " +sum);

// 2 - if - continue문 

	public void ifEx2() {
			int sum=0;
			for (int i=1; i<=100; i++) {
			if (i % 2 == 1) {
				continue;  // 아래 구문을 생략하고 증감식으로 이동
			}
				sum += i; 
			}  
						
			System.out.println("합계: "+sum);		
		}

// 3 - while문 사용

public void ifEx3() {
			int sum=0;
			
			int i=1;
			while (i <=100 ) {
				if(i % 2 == 0) { sum += i;
				} 
				  i++;
			}
			System.out.println("합계: "+sum);		
		}

 

// 매 번 사용자에게 문자열을 입력받은 후
// 해당 문자열의 길이를 출력
// 단, 사용자가 "exit"입력시 ,반복문 탈출

// ** 무한반복!: 반복문의 조건식이 늘 참이 되게 하라!

public static void stringLength() {
			Scanner sc = new Scanner(System.in);
			while (true) {
			
			System.out.println("문자열을 입력하세요. 해당 문자열의 길이를 알려드릴게요");
			String wr = sc.nextLine();
				if(wr.equals("exit")) {
						break;
				}			
			System.out.println(wr.length());
			}			
		}

 

/* 1. 사용자로부터 한 개의 값을 입력받아 1부터 해당 숫자까지의 모든 숫자를 거꾸로 출력하시오.
 * 단.입력한 숫자는 1보다 크거나 같다.
 * 1 미만의 숫자 입력 시 '1 이상의 숫자를 입력하세요" 출력, 다시 값을 입력받으시오 * 
 * ex_
 *  1이상의 숫자를 입력하세요  : 4
 *  4321
 *  1이상의 숫자를 입력하세요  : 0
 *  1이상의 숫자를 입력해주세요.
 *  1이상의 숫자를 입력하세요 
 */

		public void reverse() {
			Scanner sc = new Scanner(System.in);
			while (true) { 
				
			System.out.println("정수 하나를 입력하세요.");
			int num = sc.nextInt();
			 if (num >= 1) {	 
             // 조건식 반환타입 적는것 까먹지말라구!! 
			 	for (int i = num; i >= 1 ; i--) { 
                // 초기식 반환타입 까먹지말라구!!!
			 		System.out.println(i);
			 	} 
			 		break;			 			 		
			}
			 	System.out.println("1 이상의 숫자를 입력하세요");
		}