[JAVA기초][반복문]

포키·2022년 10월 6일
0

국비과정

목록 보기
11/73

1005 복습

  • 반복문은 가급적 적은 반복으로 결과를 구하도록 노력!
    (반복횟수가 2배라도 시간은 그 배로 걸릴 수 있다. 컴퓨터가 원래 그렇다😂)

  • 반복문 해석
    변하는 값 찾기 (증감연산자 or 대입연산자 찾기)
    값의 변화를 표로 정리하기

  • 반복문 작성
    풀어서 하나씩 적어보기
    공통점, 규칙 찾기

  • 연속, 규칙이 있는 중복은 반복문으로 처리한다.

Quiz1. 1부터 100까지 모든 홀수의 합은?

class OddSum {
	public static void main(String[] args){
		int sum = 0;
		for(int i = 1; i <= 100; i++){
			if(i % 2 != 0){
				sum += i;
			}
		}
		System.out.println("1부터 100까지 모든 홀수의 합은 " + sum);
	}
}

리팩토링↓ (실행 횟수 1/2)

class OddSum {
	public static void main(String[] args){
		int sum = 0;
		for(int i = 1; i <= 100; i += 2){
			sum += i;
		}
		System.out.println("1부터 100까지 모든 홀수의 합은 " + sum);
	}
}

for문 - 변수의 범위

for(int i = 0; ; ){
	int j = 0;
    System.out.println(j);
    j++;					// j의 범위 (반복할 때마다 생성-소멸 반복)
}							// i의 범위 (for문 전체에서 유지되다 for문 종료되면 소멸)

while문

int i = 0;
while(i < 5){
	printf("Hello World!\n");
    i++;
}
  • 조건 - 검사 - 실행순

  • for문과 차이
    반복횟수를 알고 있을 때는 for문, 예측하기 어려울 때는 while문
    for문은 카운팅하는 루프. 횟수를 센다.
    while문은 조건을 따지는 루프. 횟수를 세지 않는다. 모른다.

  • while문은 조건을 생략할 수 없다 (for문과 차이점)

  • while문은 특히 무한루프에 빠지지 않도록 주의! (while문의 조건이 false가 되는 연산을 마련해둘것)

int i = 0;
while(i < 5){
	printf("Hello World!\n");
    i++;
}

for문에 더 적절한 예제
while문에는 for문과 달리 변수 선언 공간이 없다.
따라서 while문 밖에서 따로 변수를 선언해주어야 하는데, 이는 while문이 끝난 후에도 남아있으므로, 사용하지 않는 변수가 연산 이후에도 남아있게 되므로 메모리 낭비가 된다.

import java.util.Scanner;
public class GetSum {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int sum = 0;		// 합을 담을 변수니까 언제나 0으로 초기화
		int value = 0;		// while문 최초수행을 위해 -1이 아닌 값 집어넣은 것
        //
		while (value != -1){
			sum += value;
			System.out.print("정수를 입력하시오: ");
			value = sc.nextInt();
		}
		System.out.println("정수의 합은 " + sum + "입니다.");
	}
}

while문에 적절한 예제.
값의 변화는 반복 범위 끝에서!

do-while문

while: 조건 -> 수행 -> 조건 -> 수행
do-while: 수행 -> 조건 -> 수행 -> 조건

import java.util.Scanner;
public class GetSum {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int sum = 0;		// 합을 담을 변수니까 언제나 0으로 초기화
		int value = 0;		// 수행이 보장되므로 <조건 맞춰 미리 값 세팅>할 필요가 없다!!!!!!!!!!
        //
        do {
			sum += value;
			System.out.print("정수를 입력하시오: ");
			value = sc.nextInt();
		} while (value != -1);
		System.out.println("정수의 합은 " + sum + "입니다.");
	}
}
// 전형적 do-while문
import java.util.Scanner;

class CheckInput {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int month;			// 수행이 보장되므로, 조건에 들어가는 변수도 미리 초기화시킬 필요가 없다.
		do {
			System.out.print("올바른 월을 입력하시오 [1-12]: ");
			month = sc.nextInt();
		} while (month < 1 || month > 12);
		System.out.println("사용자가 입력한 월은 " + month);
	}
}
  • ❗❗❗❗❗❗❗❗❗ do-while문에서는 끝에 ; 꼭 붙여야 함 ❗❗❗❗❗❗❗❗❗❗❗

Edit Plus 사용법

  • 설치
  • 정품인증
  • 도구 - 기본설정 - 사용자도구 - comfile, run 추가 (javac, java.exe)(인수 파일명/확장자제외파일명/파일디렉토리)
  • 새 파일 추가
  • 코드 작성
	ctrl + 1 : 컴파일
	ctrl + 2 : 실행
    //
    파란색 : 키워드
    빨간색 : Java 기본 클래스
    

중첩 반복문

for(int i = 0; i < 3; i++){
	for(int j = 0; j < 5; j += 2){
    	System.out.println("A");
    }
}
// A가 3*3=9회 출력

break: 반복문을 벗어남 (↓)
continue: 반복문에서 다음 반복으로 넘어감 (↑)

  • 코드를 예상하기 어렵게 만들어, 현재는 가급적 사용하지 않음
import java.util.Scanner;

class Averager {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int total = 0;
		int count = 0;
		boolean flag = true;
		while (flag){
			System.out.print("점수를 입력하시오: ");

			/*
			if (grade <0)
				break;
			total += grade;
			count++							// break를 사용하는 촌스러운 코드
			*/

			int grade = sc.nextInt();
			if (grade < 0){
				flag = false;

			} else {
				total += grade;
				count++;					// if-else로 대체
			} 
		}
		System.out.println("평균은 " + (total / count));
	}
}

예제. 구구단 만들기

class Page109_3 {
	public static void main(String[] args) {
		for(int dan = 2; dan <= 9; dan++){
			for(int bae = 1; bae <= 9; bae++){
				System.out.printf("%d * %d = %d\n", dan, bae, (dan*bae));
			}
			System.out.println();
		}
	}
}

숙제

class Page109_3 {
	public static void main(String[] args) {
		for(int bae = 1; bae <= 9; bae++){
			for(int dan = 2; dan <= 9; dan++){
				System.out.printf("%d * %d = %d\t", dan, bae, (dan*bae));
			}
			System.out.println();
		}
	}
}

  • while문으로 표현한다면?
		int dan = 2;
		while(dan <= 9){
			int bae = 1;
			while(bae <= 9){
				System.out.printf("%d * %d = %d\n", dan, bae, (dan*bae));
				bae++;
			}
			dan++;
			System.out.println();
		}
profile
welcome

0개의 댓글