Проблема с оператором IF, переносящим значение переменной в переключатель - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь сделать запрос, в котором пользователь должен ввести число в диапазоне от 1 до 4 (повторяется через цикл do-while, пока они не введут правильный номер), и этот номер будет соответствоватьслучай в выключателе (который откроет новое окно).При тестировании код выполняется правильно вплоть до моего оператора ELSE, где код внезапно «забывает» число, введенное пользователем для выхода из цикла while, и, следовательно, не вводит пользователя в код для каждого из случаев.в коммутаторе.

Тестирование: приглашение = ввод пользователя 5, новое приглашение: неверный выбор!пожалуйста, введите число от 1 до 4, пользовательский ввод 4, приглашение закрывается.

Кто-нибудь может понять, почему переменная reDirect в операторе IF не попадает в коммутатор?

Я приму любые предложения, но мне нужно предоставить пользователю «свободу» для ввода чисел, выходящих за пределы диапазона, чтобы доказать, что я могу обрабатывать ошибки.

Я пытался реализовать новые переменные в операторе if,но они тоже остаются вне выключателя, который замыкается.

    function reDirect() {
       var reDirect = 0;
       reDirect = parseInt(prompt("Input number between 1 and 4", "1"));
           if (reDirect >=5 || reDirect <=0) {
               var reDirect = 0
               do reDirect = parseInt(prompt("Invalid! Input number between 1 and 4", "1"));
               while (reDirect >=5 || reDirect <=0);
           } 
           else
           {
           var element = document.getElementById("reDirect");
                 switch (reDirect) {
                      default:
                      break;    
                      case 1:
               window.open("URL","_blank","height=800px, width=800px");
                      break;
        }
    }

};

Ответы [ 6 ]

0 голосов
/ 15 мая 2019

На самом деле вы уже определили переменную reDirect и инициализировали ее в 0. если вы ее объявляете.

function reDirect() {
       var reDirect = 0;
       reDirect = parseInt(prompt("Input number between 1 and 4", "1"));
           if (reDirect >=5 || reDirect <=0) {
               //var reDirect = 0
               reDirect = 0
               do reDirect = parseInt(prompt("Invalid! Input number between 1 and 4", "1"));
               while (reDirect >=5 || reDirect <=0);
           } 
           else
           {
           var element = document.getElementById("reDirect");
                 switch (reDirect) {
                      default:
                      break;    
                      case 1:
               window.open("URL","_blank","height=800px, width=800px");
                      break;
        }
    }

Ваш код работает нормально только после удаления "var reDirect"

function reDirect() {
       var reDirect = 0;
       reDirect = parseInt(prompt("Input number between 1 and 4", "1"));
           if (reDirect >=5 || reDirect <=0) {
               reDirect = 0
               do reDirect = parseInt(prompt("Invalid! Input number between 1 and 4", "1"));
               while (reDirect >=5 || reDirect <=0);
           } 
           else
           {
           var element = document.getElementById("reDirect");
                 switch (reDirect) {
                      default:
                      break;    
                      case 1:
                      console.log(1)
               window.open("URL","_blank","height=800px, width=800px");
                      break;
        }
    }
    }
reDirect()
<p id="reDirect">
what
</p>
0 голосов
/ 15 мая 2019

С помощью оператора if вы проверяете, является ли reDirect> = 5 || <= 0, и делаете цикл do while без перехода к тому, что вы используете в операторе else, рисуете окно </p>

function reDirect() {
   var reDirect = 0;
   reDirect = parseInt(prompt("Input number between 1 and 4", "1"));
       if (reDirect >=5 || reDirect <=0) {
           var reDirect = 0
           do reDirect = parseInt(prompt("Invalid! Input number between 1 and 4", "1"));
           while (reDirect >=5 || reDirect <=0);
draw();
       } 
       else
       {
draw();
}
}
function draw(){
       var element = document.getElementById("reDirect");
             switch (reDirect) {
                  default:
                  break;    
                  case 1:
           window.open("URL","_blank","height=800px, width=800px");
                  break;
}
0 голосов
/ 15 мая 2019

Некоторые изменения:

  • Вы можете изменить цикл для получения значения, чтобы иметь только одну часть для него.

  • Вам необходимо переместить часть default в конце оператора switch, поскольку, если этот оператор найден, эта часть немедленно используется, и операторы switch заканчиваются.

  • Для парсинга числа вам понадобится основание с parseInt.

  • Чтобы предотвратить использование NaN, необходимо переключить условие, которое теперь также охватывает значение NaN.

function reDirect() {
    var reDirect;
    do {
        reDirect = parseInt(prompt("Input number between 1 and 4", "1"), 10);
    } while (!(reDirect >= 1 && reDirect <= 4))
    //var element = document.getElementById("reDirect");
    console.log(reDirect);
    switch (reDirect) {
        case 1:
            window.open("URL", "_blank", "height=800px, width=800px");
            break;
        default:
            break;
    }
}

reDirect();
0 голосов
/ 15 мая 2019

Поставьте значение по умолчанию в конце оператора switch:

function reDirect() {
      var reDirect = 0;
      reDirect = parseInt(prompt('Input number between 1 and 4', '1'));
      if (reDirect >= 5 || reDirect <= 0) {
        var reDirect = 0;
        do
          reDirect = parseInt(prompt('Invalid! Input number between 1 and 4', '1'));
        while (reDirect >= 5 || reDirect <= 0);
      } else {
        var element = document.getElementById('reDirect');
        switch (reDirect) {
          case 1:
            window.open('URL', '_blank', 'height=800px, width=800px');
            break;
          default:
            break;
        }
      }
    }
0 голосов
/ 15 мая 2019

default идет в конце switch:

switch (reDirect) {
    case 1:
        window.open("URL","_blank","height=800px, width=800px");
        break;
    default:
        break;
}
0 голосов
/ 15 мая 2019

Звучит так, как будто вы не хотите условно запустить switch - вы всегда хотите запустить switch, как только вы убедились, что ввод действительный.

Просто переместите switch из else, чтобы он работал независимо от:

function reDirect() {
  var reDirect = 0;
  reDirect = parseInt(prompt("Input number between 1 and 4", "1"));
  if (reDirect >= 5 || reDirect <= 0) {
    do reDirect = parseInt(prompt("Invalid! Input number between 1 and 4", "1"));
    while (reDirect >= 5 || reDirect <= 0);
  }
  var element = document.getElementById("reDirect");
  switch (reDirect) {
    case 1:
      window.open("URL", "_blank", "height=800px, width=800px");
      break;
    // other cases
    default: break; // ???
  }
}

Также обратите внимание, что блоки объявления функции не должны иметь ; s в конце, и что, поскольку reDirect объявлен в верхней части функции, вы не должны пытаться повторно объявить его с var внутри if блок. (Вы также можете добавить кейсы для случаев 2-4 или что-то более значимое в default случае)

...