Javascript 기초 (12) 반복

코린이서현이·2023년 7월 30일
0

🤔오늘의 목표🤔

오늘까지 기본 문법들을 정리해야겠다.

📕 반복문

📖 while 반복문

condition(조건)이 truthy 이면 반복문 본문의 코드가 실행됩니다.
👉 conditionfalsy되면 반복문이 멈춘다.

  while (condition) {
    // 코드
    // '반복문 본문(body)'이라 불림
  }

📖 do while 반복문

condition이 반복문 본문 아래로 간다.
조건이 truthy인 동안엔 본문이 계속 실행된다 .conditionfalsy되면 반복문이 멈춘다.
본문이 무조건 한번은 실행된다.

	do {
  	// 반복문 본문
	} while (condition);
	//while문 뒤에 세미콜론(;)이 붙는다.

⚠️ while문 뒤에 세미콜론(;)이 붙는다.

📖 for 반복문

  for (begin; condition; step) {
    // ... 반복문 본문 ...
  }

beginconditionbodystepcondition

begin : 반복문에 진입할 때 단 한 번 실행됩니다.

condition : 반복마다 해당 조건이 확인됩니다. false이면 반복문을 멈춥니다.

body : condition이 truthy일 동안 계속해서 실행됩니다.

step : 각 반복의 body가 실행된 이후에 실행됩니다.

➕ 인라인 변수로 선언이 가능하다.

forjs (let i = 0; i < 3; i++) {
  alert(i); // 0, 1, 2
}
alert(i); // i는 반복문 안에서만 접근할 수 있습니다.Error: i is not defined

➕ 생략이 가능하다.

⚠️ 생략해도 세미콜른;은 생략해서는 안된다. (오류 발생)

for (;;) {
  // 끊임 없이 본문이 실행됩니다.
}

📖 반복문 빠져나오기: break

break : 반복문 탈출문
반복문 하나만 탈출이 가능하다.

무한 반복문 + break
: 반복문의 시작 지점이나 끝 지점에서 조건을 확인하는 것이 아니라 본문 가운데 혹은 본문 여러 곳에서 조건을 확인해야 하는 경우에 적절하다.

📖 다음 반복으로 넘어가기: continue

continue : 현재 실행준인 반복에서 다음 반복으로 넘어가게 한다.

⚠️?에는 break나 continue를 사용할 수 없다.
표현식이 아닌 문법구조는 삼항연산자 ?에 사용할 수 없다.

📖 레이블

반복문에 이름을 붙이는 것이다.

규칙
1.레이블은 반드시 break이나 continue 지시자 전에 있어야 합니다.
2.레이블 선언방법

//가능
outer : for(...
//가능            
outer : 
for(...

📒 중첩반목문 빠져나오기: 레이블 사용하기

break <labelName>문을 사용하면 레이블에 해당하는 반복문을 빠져나올 수 있습니다.

  outer: for (let i = 0; i < 3; i++) {

    for (let j = 0; j < 3; j++) {

      let input = prompt(`(${i},${j})의 값`, '');

      // 사용자가 아무것도 입력하지 않거나 Cancel 버튼을 누르면 두 반복문 모두를 빠져나옵니다.
      if (!input) break outer; // (*)

      // 입력받은 값을 가지고 무언가를 함
    }
  }
  alert('완료!');

📒 중첩반복문 계속하기

continue<labelName>을 사용하면 레이블이 붙은 반복문의 다음 반복이 실행된다.

✍️ 실습하기 : 사용자가 유효한 값을 입력할 때까지 프롬프트 창 띄우기

사용자가 100보다 큰 숫자를 입력하도록 안내하는 프롬프트 창을 띄워보세요. 
사용자가 조건에 맞지 않은 값을 입력한 경우 반복문을 사용해 동일한 프롬프트 창을 띄워줍시다.

사용자가 100을 초과하는 숫자를 입력하거나 취소 버튼을 누른 경우, 혹은 아무것도 입력하지 않고 확인 버튼을 누른 경우엔 더는 프롬프트 창을 띄워주지 않아도 됩니다.

사용자가 오직 숫자만 입력한다고 가정하고 답안을 작성하도록 해봅시다. 
숫자가 아닌 값이 입력되는 예외 상황은 처리하지 않아도 됩니다.

🤔 내 코드

  while(1){
      let anser = prompt("100보다 큰 숫자 입력");
      if(anser > 100){
          alert(anser);
          break;
      }else if(anser == "" || anser == null){
          break;
      }else {
          alert(anser);
          continue;
      }
  }

😊 해설 코드

  • do while문을 사용함.
    🤔 어떨 때 반복문이 중지되어야하는가?
    입력값이 100보다 크고, 비어있는 문자열이거나, null인 경우
    🤔 어떨 때 반복문이 실행되야하는가?
    입력값이 100보다 작은 값이며 비어있는 문자열이 아니면서, null도 아닌 경우
    (세가지의 조건이 동시에 충족되어야 하므로 &&을 사용)
    👉 num <= 100 && num != null && num != ""
    👉 num <= 100 && num
  let num;

  do {
    num = prompt("100을 초과하는 숫자를 입력해주세요.", 0);
  } while (num <= 100 && num);			//num은 num이 비어있는 문자인가 확인 하는 것, null이나 0은 falsy

✍️ 예제코드 : 2부터 n까지의 숫자 중 소수만 출력해주는 코드

🤔 내코드

  let anser = prompt("숫자 입력");
  for (let i = 2; i <= +anser; i++){
      for(let j = 2; j <= i; j++ ){
          if(i%j == 0 && j != i){
              break;
          } else if (j == i){
              alert(i);   
          } 
      }
  }

😊 모범코드

let n = prompt("숫자 입력");

nextPrime:
for (let i = 2; i <= n; i++) { // 각 i에 대하여 반복문을 돌림

  for (let j = 2; j < i; j++) { // 제수(나눗수)를 찾음
    if (i % j == 0) continue nextPrime; // 소수가 아니므로 다음 i로 넘어감
  }

  alert( i ); // 소수
}
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글