Java/UI구현

2023.03.29 while, for문

amungstudy 2023. 3. 29. 15:11

사용자에게 특정값을 입력을 받아서

조건문을 실습해보도록 하겠습니다.

                let inputText = prompt("이름을 입력해 주세요.","한글로 입력할것.");
                alert("당신의 이름은 : "+inputText+"입니다.");

                위의 prompt함수를 응용해서 성적처리 프로그램을 만들어봅시다.
                ex) 89 -> 당신의 성적은 B+입니다. 출력하도록 합시다.
                성적의 기준은 다음과 같다.
                95~100 : A+
                90~94 : A
               85~89 : B+
               80~84 : B
               75~79 : C+
               70~74 : C
               65~69 : D+
               60~64 : D
               60점 미만 : F

               입력한 값이 숫자일때만 작동하도록(1~100)
               입력한 값이 숫자가 아닌경우에는 숫자가 아니라는 메세지를 전달하도록
               소스코드를 수정 및 추가해봅시다.
               let score = prompt("점수를 입력하시오.","숫자로 입력할 것.");
               if(score>=95){
               if(score>100){
               alert("100이하의 숫자만 입력하시오.");
               }else{alert("당신의 성적은 A+입니다.");}
               }else if(score>=90){
               alert("당신의 성적은 A입니다.");
               }else if(score>=85){
               alert("당신의 성적은 B+입니다.");
               }else if(score>=80){
               alert("당신의 성적은 B입니다.");
               }else if(score>=75){
               alert("당신의 성적은 C+입니다.");
               }else if(score>=70){
               alert("당신의 성적은 C입니다.");
               }else if(score>=65){
               alert("당신의 성적은 D+입니다.");
               }else if(score>=60){
               alert("당신의 성적은 D입니다.");
               }else if(score>=1){
               alert("당신의 성적은 F입니다.");
               }else{
               alert("입력한 값이 숫자가 아닙니다.");
               }

                //선생님 풀이
           NaN(Not a Number) : 타입은 number이지만, 숫자로 변환 실패시 표현되는 변수. -> 문자열로 변환시켜서 사용했음.
             

            //     let inputScore = Number(prompt("점수를 입력 하시오.","숫자만 입력"));
            // // NaN(Not a Number) : 타입은 number이지만, 숫자로 변환 실패시 표현되는 변수.
            // // Number객체 안에 isNaN()함수를 통해서 NaN값을 체크 - 추천.
            // console.log("NaN체크 : ", Number.isNaN(inputScore) );
            // console.log("inputScore 확인용 : ", inputScore.toString());
            // // if(typeof inputScore == "number" && inputScore.toString() != "NaN"){
            // if(typeof inputScore == "number" && !Number.isNaN(inputScore) ){
            //     if( inputScore >= 0 && inputScore <= 100){ //0~100점 사이의 점수를 체크
            //         if(inputScore>=90){
            //             if(inputScore >= 95){
            //                 alert("당신의 성적은 A+입니다.");
            //             }else{
            //                 alert("당신의 성적은 A입니다.");
            //             }
            //         }else if(inputScore >= 80){
            //             if(inputScore >= 85){
            //                 alert("당신의 성적은 B+입니다.");
            //             }else{
            //                 alert("당신의 성적은 B입니다.");
            //             }
            //         }else if(inputScore >= 70){
            //             if(inputScore >= 75){
            //                 alert("당신의 성적은 C+입니다.");
            //             }else{
            //                 alert("당신의 성적은 C입니다.");
            //             }
            //         }else if(inputScore >= 60){
            //             if(inputScore >= 65){
            //                 alert("당신의 성적은 D+입니다.");
            //             }else{
            //                 alert("당신의 성적은 D입니다.");
            //             }
            //         }else{
            //             alert("당신의 성적은 F입니다.");
            //         }
            //     }else{
            //         alert("유효한 점수의 범위가 아닙니다.");
            //     }
            // }else{
            //     alert("숫자가 아닙니다. 다시 입력해주세요.");
            // }
           


                //스위치문을 활용하여 입력된 값이 홀수 인지 짝수인지 구분하는 프로그램을 생성해봅시다.
                //홀수인경우,짝수인경우,숫자가 아닌 경우        
               
                let inputNumber = prompt("숫자를 입력하시오");
               
                switch(inputNumber%2){
                    case 1:
                        alert("홀수 입니다.");
                        break;
                    case 0:
                        alert("짝수 입니다.");
                        break;
                    default:
                        alert("숫자가 아닙니다.");
                        break;
                }

                //선생님 풀이
                let inputNum = Number(prompt('숫자를 입력하세요.'));
                switch(imputNum %2){
                    case 0:
                        alert("짝수 입니다.");
                        break;
                    case 1:
                        alert("홀수 입니다.");
                        break;
                    default:
                        alert("숫자만 입력해주세요.");
                        break;
                }
 

 

JS의 반복문

반복되는 소스코드를 반복문을 사용하여 간략하고, 편리하게 작성가능
 
 
    <script>
        // console.log(`-------2단--------`);
        // console.log(`2 x 1 = 2`);
        // console.log(`2 x 2 = 4`);
        // console.log(`2 x 3 = 6`);
        // console.log(`2 x 4 = 8`);
        // console.log(`2 x 5 = 10`);
        // console.log(`2 x 6 = 12`);
        // console.log(`2 x 7 = 14`);
        // console.log(`2 x 8 = 16`);
        // console.log(`2 x 9 = 18`);

  반복문의 종류 :  while문, do while문, for문

        while문의 형태
        while(조건식){수행문;}

        while을 작성할때는 break; 달아주거나, 조건식이 false되도록 상한선을 잘 설정해줘야함.

        let i = 0;
        while(i < 10){
            console.log("while을 이용한 반복문 연습", i);
            i = i + 1;
        }
        console.log("반복문 종료");
 
while문의 조건이 false로 바꿀 수 있는 경우에 위와 같이 작성 가능.
 

        let i1 = 0;
        while(true){
            console.log("while을 이용한 반복문 연습", i);
            i1 = i1 + 1;
            if(i1 == 10){
                break; //해당 제어문을 빠져나온다. -> 특정 조건일때 break되도록 작성함.
            }
        }
        console.log("반복문 종료");

 

while문의 조건이  true일때는 break문을 사용해서 프로그램을 종료 해주자.

 

 

     구구단 2단을 while문을 이용하여 출력하도록 작성해봅시다.
     위에서 한줄씩 작성한 2단과 같이 출력되도록 작성.
        let n = 1;
        while(n < 10){
            console.log(`2 x ${n} = `,2*n);
            n = n + 1;
        }
        console.log("반복문종료");

        //선생님 풀이
        let i2 = 1;
        console.log("------------2단--------");
        while(true){
            console.log(`2 x ${i2} = ${2*i2}`);
            i2 += 1; // i = i + 1;
            if(i2 == 10){
                break;
            }
           
        }


     do-while문 : while문과는 다르게 일단 한번은 수행문을 실행한 후 조건을 검사한다.

     do-while문의 형태
     do{수행문;}while(조건식);
        let y = 0;
        do{
            console.log("do-while문을 이용한 반복문 연습",y);
            y = y + 1;
        }while( y < 10 );
        console.log("do-while문 종료");


     for문 - 초기식, 조건식, 증감식을 포함하는 반복문

     while문보다는 사용하기가 편하다.(정해진 횟수가 있어서 break안써도됨.)

       for문의 형태
       for(초기식; 조건식; 증감식){수행문;}
       
       for(let i = 0; i <10; i++){
            console.log("for문을 이용한 반복문 연습",i);
        }

       for문을 이용하여 구구단 2단을 출력하도록 작성해봅시다.
        console.log("------2단출력------");
        for(let i = 1; i <10; i++){
            console.log(`2 x ${i} = ${2*i}`);
        }


        //어제 12345의 각 자리의 숫자를 더해봅시다.
        //아래의 소스코드를 반복문으로 변경하여 작성해봅시다.
        let num = 12345;
        // let num1 = num % 10;
        // num = parseInt(num/10);
        // let num2 = num % 10;
        // num = parseInt(num/10);
        // let num3 = num % 10;
        // num = parseInt(num/10);
        // let num4 = num % 10;
        // num = parseInt(num/10);
        // let num5 = num % 10;
        // console.log(num1+num2+num3+num4+num5);

        //num변수에는 12345가 저장되어있다.
        let result = 0;
        for(let i = 0; i<5; i++){ //i는 0~4까지 총 5번 실행
            let _num = num % 10;
            result += _num; //result = result + _num
            num = parseInt(num / 10);
       
        } console.log("for문을 활용한 각 자리수의 합 : ",result)

       for문을 사용하여 문자열 순회하기

        // let inputNum2 = prompt('각자리의 수를 더해주는 프로그램','숫자입력');//123
        // console.log("inputNum2 확인용 : ",inputNum2.length);//3
        // alert("inputNum2의 첫번째자리 확인용 : "+inputNum2[0]);//0~2
        // let result2 = 0;
        // for(let i = 0; i<inputNum2.length; i++){ //값이 123이면 0~2까지 3번 순회
        //     result2 = result2 + Number(inputNum2[i]);
        // }alert("각 자리의 수의 합 : "+result2);


반복문도 중복이 가능하다.

2중for문 - for문 안에 for문을 중첩해놓은 형태
배열안에 있는 값들을 순회할때 for문을 같이 사용

2중for문이 실행될 때 순서 :
바깥for문의 첫번째 실행에서 안쪽for문이 실행    
        for(let i = 0; i <5; i++){
            for(let y =0; y < 5; y++){
                console.log(`i의 값 : ${i}, y의 값 : ${y}`);
            }
        }

//2중for문을 이용하여 구구단2~9단 까지 출력
        for(let x = 2; x<10; x++){
            console.log(`------${x}단------`);
            for(let y = 1; y <10; y++){
                console.log(`${x} x ${y} = ${x*y}`);
            }
        }

  향상된 for문 - 기존 for문에서 좀 더 간결해진 문법  (for in, for of),

                           배열이나 문자열에서 사용. 

 

        let arr = [6,7,8,10,11,100];
        console.log(arr[0]); // 6
        console.log(arr[1]); // 7
        console.log(arr[2]); // 8
        console.log(arr[3]); // 10
        console.log(arr[4]); // 11
        console.log(arr[5]); // 100
        console.log("-----반복문으로 배열 안의 값 출력------");
        for(let i = 0; i < arr.length; i++){
            console.log(arr[i]);
        }
 
 

for in 문(주소값 가지고 옴)

        console.log("-----for/in 문으로 변경-------");
        for(let i in arr){ //변수arr의 인덱스값이 변수 i를 통해 가져올 수 있다.
            // for / in 을 쓸때 변수는 배열이나 문자열과 같이 데이터의 index값이 있는 data이어야 한다.
            console.log(arr[i]);
        }
 

for of 문(주소값의 값을 가지고 옴)

        console.log("-------for/of 문으로 변경-------");
        for(let i of arr){ //변수arr를 순회하면서 index의 실제값을 변수i를 통해 가져온다.
            console.log(i);
        }
 

예제)


        //1에서 100사이의 수 중에서 2의 배수의 합을 구해 봅시다.
        // 반복문과 조건문을 활용하여 소스코드 작성.
        let sum1 = 0;
        console.log("------1~100사이의 수 중에서 2의 배수합------")
        for(let i=1; i<101;i++){
            if(i%2 == 0){
                sum1 += i;
            }    
        }console.log("2의 배수의 합 :",sum1);

        //업&다운 게임을 만들어봅시다.
        // Math.random()함수
        // const random = parseInt(Math.random() * 20) + 1; //1~20사이의 숫자를 랜덤하게 발생
        // console.log("난수 발생 : ",random);
        // let isContinue = true;
        // while(isContinue){
        //     let number = prompt("숫자를입력하세요");
        //     if(number == 5){
        //         alert("종료");
        //         isContinue = false;
        //     }
        const isContinue = parseInt(Math.random() * 100) + 1;
        while(isContinue){
            let number=prompt("숫자를입력하세요");
            if(number>isContinue){
                alert("다운")  
            }else if(number<isContinue){
                alert("업")
            }
            if(number==isContinue){
                alert("종료");
                isContinue = false;
            }
        }
    </script>