JS switch문 오류

조회수 634회
   <head>
    <meta charset="utf-8" />
    <title>성적 산정 프로그램</title>
        <script>
            var input = Number(prompt('숫자를 입력하세요.','숫자'));

            switch(input) {
                case 숫자 > 89;
                    alert('A+');
                    break;
                case 숫자 > 79;
                    alert('A');
                    break;
                case 숫자 > 69;
                    alert('B+');
                    break;
                case 숫자 > 59;
                    alert('B');
                    break;
                case 숫자 > 49;
                    alert('C+');
                    break;
                case 숫자 > 39;
                    alert('C');
                    break;
                case 숫자 > 29;
                    alert('D+');
                    break;
                case 숫자 > 19;
                    alert('D');
                    break;
                case 숫자 < 20;
                    alert('F');
                    break;
            }
        </script>
</head> 

왜 실행이 안될까요?

1 답변

    1. 작성하신 JS 코드는 즉시 인터프리팅되며 바로 실행이 됩니다. 그런 코드는 보통 <body> 태그 안에 (보통 </body> 직전에) 둡니다.
      • 그리고 페이지를 열자마자 실행되는 prompt()란 솔직히 말하면 어떤 사용자도 원하지 않는 행동입니다. 보통 이런 작업은 버튼 클릭 같은 조건적 상황에 실행합니다.
    2. case 문에 들어 있는 숫자 변수는 정의된 적이 없는 변수입니다. 눈을 크게 뜨고 잘 살펴보세요.
    3. 부등식을 case 조건으로 쓰시려면 이렇게 해야 한다고 합니다. 그나마도 상당히 느리다고 하네요.

      switch (true) {
        case (val < 1000): /* do something */ break;
        case (val < 2000): /* do something */ break;
        ...
      }
      
    4. 예컨대 숫자 == 93일 경우, 사용자는 A+부터 F까지 모든 점수를 받게 됩니다. 잘 생각해 보세요.

      • 요컨대 '가장 덜 일반적인 경우부터 차례대로' 검사하고, 하나라도 해당될 경우 전체 검사 절차를 중지하는 처리가 필요합니다.

    저라면 이런 방식으로 짜겠습니다. 일단 실행은 됩니다.

    // 중간 생략
    var score = prompt('숫자를 입력하세요.', '숫자');
    for (let i = 0; i < gradingRule.length; i++) {        // 앞에서부터 점검하여
        const rule = gradingRule[i];
        if (parseInt(score) >= rule.minScore) {           // 하나라도 걸리면
            alert('당신의 등급은 ' + rule.grade + '입니다.'); // 응답하고
            return true;                                  // 실행 중단
        }
    }
    
    • 👍 편집요청빌런 2020.4.28 23:15
    • 감사합니다ㅜ 비효율적인 방법이란것은 알지만, 교수님이 일단 저렇게 구현하시기를 원해서요ㅜ( script로 하길 원하시고+ 아직 for구문을 배우지 않아서요!) 알 수 없는 사용자 2020.4.28 23:20
    • 저런... 여기 답글달면서 느끼는 거지만 정말 안좋은 커리큘럼 고집하시는 교수님 선생님들도 적잖은가 보더군요... 힘내세요. 엽토군 2020.4.29 09:15

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)