- [Java] 15. 반복문 while2024년 04월 12일
- Song hyun
- 작성자
- 2024.04.12.:13
728x90반응형[Java] 15. 반복문 While
1. 반복문 while
(1) while문이란? 수행문을 수행하기 전, 조건을 체크하고, 그 조건의 결과가 true인 동안 반복해서 수행한다.
-주어진 조건에 맞는 동안(true) 지정된 수행문을 반복적으로 수행하는 제어문이다. 조건이 맞지 않으면 수행이 종료된다.
-조건은 주로 반복 횟수나 값의 비교의 결과에 따라 true/false로 판단된다.-while문은 순서를 바꾸는 것에 의해 결과가 달라지기도 한다.
-while문은 if문과 자주 같이 쓰인다.
-boolean flag: 자주 쓰이는 코드 컴포지션.
(2) while문의 형태: 형태: while(조건식){수행식;}
-패키지: 주 언어 파일들을 모아둔 폴더.
-임포트(import): 다른 곳에서 파일을 가져오는 것.(3) 반복문 for와 while의 비교
-for와 while은 프로그램 내에서 반복적으로 수행되는 동작을 쉽게 구현할 수 있다는 공통점이 있다. 하지만 미세한 차이점 역시 존재한다. 바로 변수의 선언이다.
-for문의 경우, 형태에서도 알 수 있듯 식 내에서 변수의 초기화가 이루어진다. 그리고 for문에서 선언된 변수는 for문이 종료되는 순간 메모리 할당이 해제된다. (그래서 for문이 조금 더 빠르다!)
-while문의 경우 별도의 초기화식이 없고, 하나의 조건을 체크한 뒤 실행문을 실행하게 된다. 무한 루프 구현이 쉽게 가능하다는 장점이 있다.
(4) return/break과 boolean 변수 설정의 차이
while문을 멈추게 하는 방법에는 크게 두 가지가 있는데, 바로 return/break;과 while 조건식의 활용이다.
return은 흐름 제어문(Control flow statement)으로, 프로그램이 진행되는 흐름을 제어한다. (return 외에도 continue, break가 있다.) while 조건식에는 true/false만 들어갈 수 있는데, 이 점을 활용해 boolean 변수를 사용하여 while 문을 종료시킬 수 있다. 이 두 가지 방법에는 작은 차이가 있는데, 아래의 실행결과를 살펴보자.
아래의 코드는 1부터 10까지의 수를 모두 더한 결과를 순차적으로 출력하는 코드이다.
첫번째 사진은 코드의 종료방식을 while의 조건식의 특징을 활용한 것이고(논리형 변수 flag 사용).,
두번째 사진은 흐름 제어문 return;을 사용한 것이다.
두 개 모두 while문이 종료한 것은 같지만, 결과는 다르다. while의 조건식을 사용한 것은 sum이 10일때까지, return;을 사용한 것은 sum이 9일 때까지만 실행되었다. 왜 이런 차이가 발생한 걸까? 이는 바로 두 가지 방식의 특성이 각기 다르기 때문이다.
위 코드가 멈추게 되는 과정을 살펴보자면 이렇다.
while의 조건식을 활용하게 된다면, 변수 start==10일때 변수 flag의 값은 false가 된다. 하지만 flag는 while문의 조건식에 쓰이는 boolean타입 변수일 뿐, 직접적으로 while문을 정지하게 만들지는 못한다. 때문에 flag가 false의 값을 가지게 된 뒤로도 수행문이 모두 동작하게 되고, while문의 첫 문장으로 돌아가 조건식을 따지게 되면, 그제서야 동작이 정지한다.
하지만 return을 사용하게 되면, 변수 start의 값이 10이 되면, 그 즉시 반복문이 종료되기 때문에, 그 밑의 System.out.pritnln은 실행되지 않는 것이다. 코드를 작성할 때, 원하는 결과나 특징에 따라 이런 차이를 잘 사용하면 좋을 것 같다.
연습문제 1.
1 부터 10까지 덧셈에 연산을 콘솔창에 출력 하시오 단, while 구문 작성!
풀이과정:
(1) 정수형 변수 start1를 선언하고, 1을 대입한다.
(2) 논리형 변수 button을 선언하고, true(참)을 대입한다.
(3) 변수 start1을 출력한 뒤, 1씩 더하는 while문을 만든다.
이 때, 이 while문은 논리형 변수 button이 참일 때에 한정해 반복수행된다.
(4) 만약 start1이 11과 같아지면, 변수button에 false값을 리턴하는 if구문을 만든다.
10을 출력한 뒤에는 while구문은 종료된다.
int start1=1; boolean button=true; while(button) { System.out.println(start1); start1++; if(start1==11) { button=false; return; } }
연습문제 2.
1부터 10까지의 수를 모두 더한 값을 while 반복문을 통해 출력해보자.
풀이과정:
(1) while은 초기화식이 따로 없기 때문에, 정수형 변수 start, end, sum을 선언, 초기화한다.
(2) 논리형 변수 flag를 선언하고, flag가 true일 동안 반복수행하는 while문을 작성한다.
(3) 변수 sum에는 1부터 10까지의 수를 모두 더하게 한다.
그리고 sum의 연산과정을 System.out.println을 통해 출력하게 한다.
(4) if문을 통해, 변수 start가 10이 되면 flag를 멈추게 한다.
-단 변수 flag를 false로 초기화하게 되면, 11까지의 합도 나오게 되므로,
if문의 조건을 9로 바꾸거나, return/break를 사용하는 것이 좋을 것 같다.
연습문제 3.
당신은 자바를 사용하여 간단한 메뉴 선택 시스템을 개발하는 작업을 맡았습니다. 이 시스템은 사용자에게 여러 옵션 중 하나를 선택하도록 요청하고, 사용자의 선택에 따라 적절한 메시지를 출력해야 합니다. 프로그램은 사용자가 '종료' 옵션을 선택할 때까지 반복해서 실행되어야 합니다.
풀이 과정:
우선 어디가 반복적으로 동작하고, 어디가 갈림길인지를 알아야 한다. 구조를 살펴보면 (1) 사용자로부터 숫자를 입력받고, (2) 해당 숫자를 기준으로 선택지를 판단한 뒤, (3) 해당 선택지에 맞는 스크립트를 출력하고, 다시 메뉴 선택으로 돌아가거나 / 반복문을 종료한다.
1. 사용자가 입력한 숫자에 따라 메뉴가 선택되는 부분은, 조건식에 따라 다른 결과가 나오는 if else문을 쓰면 좋을 것이다.
2. 0(종료)외에는 메뉴선택이 계속해서 반복되기 때문에, 메뉴 선택 스크립트 출력-입력을 받는 부분은 while문으로 반복되면 좋을 것이다.
세부적인 과정을 하나씩 생각해보면,
(1) Scanner 라이브러리를 import해온다.
[while]
(2) System.out.println을 통해, 사용자에게 메뉴를 선택할 수 있게끔 스크립트를 출력한다.
(3) scanner를 이용해, 사용자로부터 입력을 받는 int형 변수를 선언한다.
[if]
-입력받은 변수에 따라 해당 스크립트를 출력한다.
-0의 경우, 입력받은 뒤 스크립트를 출력, 종료시켜야 하기 때문에 break, 혹은 return을 통해 종료시킨다.
continue는 다음 루프로 이동하기 때문에(선언시 메뉴 선택으로 돌아갈 것이다) 쓸 수 없다.
와 같은 과정이 될 것이다.
boolean flag = true; while (flag) { Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); // nextInt: 정수형으로 받아준다. System.out.println("\n메뉴 선택"); // \n:한 줄 내림 System.out.println("1.등록 2.조회 3.수정 4.삭제 0.종료"); System.out.print("선택 : "); if (choice == 1) { System.out.println("등록을 선택했습니다.\n\n"); System.out.println("-------------------------"); } else if (choice == 2) { System.out.println("조회를 선택했습니다.\n\n"); System.out.println("-------------------------"); } else if (choice == 3) { System.out.println("수정을 선택했습니다.\n\n"); System.out.println("-------------------------"); } else if (choice == 4) { System.out.println("삭제를 선택했습니다.\n\n"); System.out.println("-------------------------"); } else if (choice == 0) { System.out.println("프로그램을 종료합니다.\n\n"); System.out.println("-------------------------"); break; } else { System.out.println("잘못된 입력입니다. 다시 선택해주세요."); } if (choice == 4) { flag = false; } }
728x90반응형'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 17. 콘솔에서 입력 받기 : Scanner 클래스 (0) 2024.04.15 [Java] 16. 흐름 제어문 return, break, continue (0) 2024.04.12 [Java] 14. 반복문 for (0) 2024.04.12 [Java] 13. 조건문 if, if else, else if (0) 2024.04.12 [Java] 12. 삼항 연산자와 연산자 우선순위 (0) 2024.04.12 다음글이전글이전 글이 없습니다.댓글