반복문(Loop Statement)

Joy🌱·2022년 12월 25일
0

☕ Java

목록 보기
8/40
post-thumbnail

💁‍ 반복문(Loop Statement)이란,
프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문

👀 for문

💁‍ for문은 초기식 및 조건식 확인 후, 조건식이 true면 문장 수행.
다시 증감식을 연산하고 조건식 확인 후, 조건식이 true면 또 문장 수행. (조건식이 false일 때까지 반복)

  • for(초기식; 조건식; 증감식) { }
  • 조건식이 false면 수행하지 않음

1) 1부터 10까지 1씩 증가시키면서 값을 출력하는 기본 반복문

for(int i = 1; i <= 10; i++) {
	System.out.println(i);	
}

📌 Ref.

* for문 초기식에 선언한 변수는 for문 내에서만 사용 가능
  ex) System.out.println(i);참고사항 설명

2) 1~10까지의 합계 구하기

>>> 결과를 누적시켜 담아줄 변수 선언
int sum = 0;
		
for(int i = 1; i <= 10; i++) {
	sum += i; 
    >>> '+='으로 i를 누적
}
System.out.println("sum : " + sum);

3) 5~10 사이의 난수를 발생시켜 1에서부터 발생한 난수까지의 합계 구하기

int random = (int) (Math.random() * 6) +5 ; // 5~10 사이의 난수 발생시키기

>>> 합계를 누적할 변수
int sum = 0; 
for(int i = 1; i <= random; i++) { 	
	sum += i;	
    >>> 1부터 랜덤숫자까지의 합계
}
System.out.println("1부터 " + random + "까지의 합계는 " + sum + "입니다.");

4) 숫자 두 개를 입력받아 작은 수에서 큰 수까지의 합계 구하기

단, 두 숫자는 같은 숫자를 입력하지않는 가정으로 해결

Scanner sc = new Scanner(System.in);
System.out.println("첫 번째 정수 입력 : ");
int first = sc.nextInt();
System.out.println("두 번째 정수 입력 : ");
int second = sc.nextInt();
		
>>> 여기서, 변수 first와 second를 for문에 직접 넣는 것은 오류가 날 수 있음
>>> 왜냐하면, 입력되는 두 번째 정수가 첫 번째 정수보다 작다면 for문의 i가 더 큰 수가 되기 때문에
>>> first와 second 중 어느 것이 더 큰 수인지 확인할 if문이 필요
		
>>> 두 수 중 작은 수가 i
int min = 0;
int max = 0;
		
if(first > second) {
	max = first;
	min = second;
} else {
	max = second;
	min = first;
}
		
int sum = 0;
for(int i = min; i <= max; i++) {
	sum += i;
}
System.out.println(min + "부터 " + max + "까지의 합은 " + sum + "입니다.");

5) 키보드로 정수값을 입력받아 2~9 사이의 값인 경우 해당 단의 구구단을 출력, 그렇지 않은 경우 "반드시 2~9 사이의 양수를 입력해야 합니다."를 출력

Scanner sc = new Scanner(System.in);

System.out.println("출력할 구구단의 단 수를 입력하세요 : ");
int dan = sc.nextInt();
		
>>> 입력한 숫자가 2~9 사이인지 조건 확인
if (dan > 1 && dan < 10) {
	for (int su = 1; su <= 9; su++) {
		System.out.println(dan + " * " + su + " = " + (dan*su));
	}	
} else {
	System.out.println("반드시 2~9 사이의 양수를 입력해야 합니다.");
}

👀 중첩 for문

💁‍ for문에 진입하면 수행 될 문장1을 먼저 수행하고 두 번째 for문에 진입하면 조건식2가 false가 될 때 까지 수행 될 문장2를 수행.
조건식2가 false가 되어 반복문을 빠져 나오면
수행 될 문장3을 수행하고 조건식1로 돌아와 true면 다시 반복.

1) 구구단 2단 ~ 9단까지 출력

for(int i = 2; i <= 9; i++){
			
	System.out.println("===============" + i + "단==============");
			
	for(int j = 1; j <= 9; j++) {
				
		System.out.println(i + " * " + j + " = " + i*j);
	}
}

2) 키보드로 입력받은 정수만큼 행으로 별을 출력하는 메소드

Scanner sc = new Scanner(System.in);

System.out.println("출력할 행의 수를 입력하세용 : ");
int row = sc.nextInt();
		
for(int i = 1; i <= row; i++) {
			
	for (int j = 1; j <= 5; j++) {
		System.out.print("*");
	}
	System.out.println();
    >> *을 다섯개찍고 개행
	}

3) 키보드로 입력받은 정수행만큼 별을 직각 삼각형 모양으로 출력

Scanner sc = new Scanner(System.in);

System.out.println("출력할 행의 수를 입력하세용 : ");
int row = sc.nextInt();
		
for(int i = 1; i <= row; i++) {
			
	>>> 행의 수만큼 별을 출력하는 반복문
	for (int j = 1; j <= i; j++) { >>> i가 증가하는만큼 j도 증가
		System.out.print("*");
	}
	System.out.println();

👀 while문

💁‍ while문은 조건식이 true일 때 반복문 진입, 아래 문장 수행, 조건 확인 후 false가 될 때까지 반복 후 종료

1) 1부터 10까지 1씩 증가시키면서 i값을 출력하는 반복문

public void testSimpleWhileStatement() {

	int i = 1; >>> 초기식
	while(i <= 10) { >>> 조건식
		System.out.println(i + " 출력");
		i++; >>> 증감식 (없으면 while문을 탈출할 수 없으므로 무한루프)
	}
}

2) 입력한 문자열의 인덱스를 이용하여 문자 하나씩 출력해보기

public void testWhileExample1() {
		
	Scanner sc = new Scanner(System.in);
	System.out.println("문자열 입력 : ");
	String str = sc.nextLine();
		
	int index = 0;
	while(index < str.length()) { >>> str.length() : 콘솔창에 입력된 str의 길이를 int(정수형)로 반환
		>>> 여기서 <가 아닌 <=를 넣으면 오류. index는 0부터 시작하므로 같다는 조건을 붙이면,
        >>> 콘솔에 입력한 문자보다 1이 많은 값까지 출력되므로 오류가 발생됨
		char ch = str.charAt(index);
        >>> ch : (apple을 콘솔창에 입력했을 때) 0번 인덱스에 있는 a, 1번 인덱스에 있는 p 등등 
        >>> 자리값을 char(문자형)으로 반환
		System.out.println(index + " : " + ch);
        >>> 증가하는 index(정수형) : 그 자리값의 char(문자형)
		index++;
		}
	}

📌 Ref.

* charAt() : String 클래스의 메소드로 문자열에서 인덱스에 해당하는 문자를 char형으로 반환하는 기능 
* length() : String 클래스의 메소드로 문자열의 길이를 int형으로 반환하는 기능
* index는 0부터 시작하고 마지막 인덱스는 항상 길이보다 1 작은 수를 가짐
* 만약 존재하지 않는 인덱스에 접근하게 되면 StringIndexOutOfBoundsException이 발생 
  (위의 조건식이 i <= str.length()가 될 경우)

3) 정수 하나를 입력받아 1부터 입력받은 정수까지의 합계를 구하기

public void testWhileExample2() {
		
	Scanner sc = new Scanner(System.in);
	System.out.println("정수를 하나 입력하세요 : ");
	int num = sc.nextInt();
		
	// while문 사용 	
	int sum = 0;
	int i = 1;
	while(i <= num) {
		sum += i; >>> 아래의 증감식(i++)을 이 식에 합쳐도 됨. 누적 대입 연산보다 후위연산자가 나중에 동작하므로 문제 X
		i++;
	}
	System.out.println("1부터 입력받은 정수 " + num + "까지의 합계는 " + sum + "입니다.");
}

4) 중첩 while문을 이용한 구구단 출력

public void testWhileExample3() {
		
	int dan = 2;
	while(dan < 10) {
			
		int su = 1; >>> 이 초기식의 위치가 맨 위로 가면 내부 while문이 실행되지 않아 2단만 출력함
		while(su < 10) {
			System.out.println(dan + " * " + su + " : " + (dan * su));
			su++; >>> su가 9가 되면 while문 종료
			}
		dan++;
        >>> 증감식의 위치 설정을 잘 고려해야함	
	}
}

👀 dowhile문

💁‍ do 안의 내용 먼저 실행, 조건식 확인 후 true면 문장 수행, false면 종료

  • while 뒤에 ; 꼭 필요

1) 조건을 false로 두고 실행되는지 테스트

public void testSimpleDoWhileStatement() {
		
//		while(false) {
//			System.out.println("while문");
//		}
		>>> 컴파일 에러
		
		do {
			System.out.println("dowhile문");
		} while(false);
		>>> 둘 다 whilefalse인 값이지만 do에서 일단 한번은 실행하기 때문에 에러가 나지않고 한 번 출력이 됨
	}

2) 키보드로 문자열을 입력받아 반복적으로 출력하기

  • 단, exit가 입력되면 반복문을 종료
public void testSimpleDoWhileExample() {
		
	Scanner sc = new Scanner(System.in);
	String str = "";
		
	do {
		System.out.print("문자열 입력 : ");
		str = sc.nextLine();
		System.out.println("입력한 문자 : " + str);
			
	} while(!str.equals("exit"));
} 
>>> while(!str.equals("exit")); 해석
: while(false)일때, 이 dowhile문이 종료
1. str에 “exit”이 입력되었나(값이 같은가)? 
2. ! 아니요
3. 거짓말 했으니까 너 false
4. 종료

📌 Ref.

* 문자열(참조 자료형)==, !=로 값 비교가 불가능
  String 클래스에서 제공하는 equals() 메소드를 통해 비교해야함

profile
Tiny little habits make me

0개의 댓글

관련 채용 정보