본문 바로가기

JAVA

JAVA(9) - 무한 반복문/반복문 - while문/에러 뜨는 이유

1. 무한반복문

1.) for/while문으로 무한 반복문 작성

		System.out.println("메뉴 출력");
		
		//항상 참인걸로 간주 for 또는 while문
		//for (;;) {
		while(true) {	
			System.out.println("1. 입력하기");
			System.out.println("2. 불러오기");
			System.out.println("3. 저장하기");
			System.out.println("4. 출력하기");
			System.out.println("5. 종료하기");
			System.out.println("입력 > ");
			menu = scan.nextInt();

 

2.) 5를 입력하면 프로그램 종료

   break;

  • 반복문을 종료해라!
  • break 시에 if문은 해당되지 않고 이외에 switch나 for문을 break하는 역할(break의 영향을 받지않는 유일한 제어문은 if문)
			if (menu == 5) {
				break;
			}

 

3.) 번호 입력시 해당 case문 출력

  • if문이 switch문보다 나중에 오는 이유는 5번 입력될 경우 반복문이 실행됨
			switch (menu) {
			case 1:
				System.out.println("입력하기 처리");
				break;
			case 2:
				System.out.println("불러오기 처리");
				break;
			case 3:
				System.out.println("저장하기 처리");
				break;
			case 4:
				System.out.println("출력하기 처리");
				break;
			default:
				System.out.println("입력오류");
				break;
			}

 

2. 반복문 - while문

  while(조건식) {...}

: 조건식을 만족하는동안 계속 반복됨


예시1) 1~100까지 숫자의 총합

		int i = 1;
		int sum = 0;
		
		while(i <= 100) {
			sum += i;
			i++;
		}
		
		System.out.println("1~100까지 총합은 " + sum);
		
		//위 while문을 for문으로 작성해보기
		int sum2 = 0;
		
		for (int j = 1; j <= 100; j++) {
			sum2 += j;
		}
		
		System.out.println("1~100까지 총합은 " + sum2);

 

예시2) 구구단 가로 출력 예시

		System.out.println("***구구단***");
		int k = 1, l = 1;
		
		while(k <= 10) {
			while(l <= 10) {
				System.out.printf("%2d * %2d = %-7d", l,k,k*l);
				l++;
			}
			System.out.println();
			k++;
			l = 1;
		}

 

예시3) -1이 입력될 때까지 반복적으로 점수를 입력받아서 평균을 출력는 프로그램
1.)스캐너 만들기

Scanner scan = new Scanner(System.in);

2.) 사용할 변수 만들기
점수 입력용 변수
평균 저장 변수 (평균 변수는 나눗셈하면 소수점으로 나올 수 있으니까 double형)
총점 저장 변수
카운트 변수

		int inNum = 0, total = 0, cnt = 0;
		double avg = 0.0f;

3.) 점수 입력
-1이라면/아니라면.. 
-1이 아니라면 총점에 입력한 점수 더하기.(반복)
-1이라면 총점을 카운트 변수 나눗셈하여 평균 계산.

 

3-1) while문 활용해서 문제 풀어보기

		inNum = scan.nextInt();

		while(inNum != -1) {
			total += inNum;
			cnt++;	//
			inNum = scan.nextInt(); //다시 새로운 입력값을 받아야하니까 scan 다시 써줌
		}	
		
		avg = (double)total/cnt;	//형변환)정수 연산. -> 실수 연산
		System.out.println(cnt + "명 평균은 " + avg);

3-2) do while문 활용해서 문제 풀어보기

		cnt = -1;
		//do 문은 일단 맨처음에 반드시 한번 실행된다.
		do {
			total += inNum;
			cnt++;	
			inNum = scan.nextInt();
		} while (inNum != -1);	//do while문 사용할 때 유의점 : 끝에 ';' 꼭 찍어주기


4.) 평균 출력

System.out.println(cnt + "명 평균은 " + avg);

 

3. 에러 뜨는 이유

1. 오타
2. ';' 미스
   if(조건식);{ }
   switch(정수식);{ }
   for(초기식;조건식;증감식);{ } 
   while(조건식);{ }

4. break, continue 문 

  • 단독으로 사용이 불가능한 제어문
  • if문에 사용되고 break문의 경우 switch문에서도 사용됨.

5-1) 1~100까지 짝수의 합 

		int sum = 0;
		for (int i = 1; i < 100; i++) {

			if (i % 2 == 0) {
				continue;
				sum += i;
			}

5-2) 위의 코드를 수정해서 continue 사용해서 짝수 합 구하기

			if (i % 2 != 0) {
				continue;	//홀수면 continue : 뒤에 오는 처리문 생략하라.				
			}	
			sum += i;

 

5-3) break문 사용하면 반복문 멈춤

			if (i % 2 != 0) {
				break;	// 홀수면 브레이크 걸려서 for문 나옴
			}	
			sum += i;