Почему мой цикл for не работает или это что-то еще вызывает проблемы?

#javascript #html #for-loop

#javascript #HTML #for-loop

Вопрос:

Мой вопрос не о том, является ли результат моей функции или цикла правильным. Речь идет о том, что мой цикл не работает, что бы я ни делал.

Что я пытался исправить сам:

  1. Я проверил, правильно ли связаны html и JavaScript и запускается ли функция кнопкой с именем «Dreieck» вообще. Чтобы проверить, что я использовал document.getElementById("ausgabe").innerHTML="x"; сразу после цикла, чтобы увидеть, работает ли он вообще, и это сработало. Это означает, что после нажатия на «Dreieck» в div появился x с идентификатором «ausgabe».
  2. Тогда я подумал, может быть, мой цикл не работает, потому что он не получает никакого значения из переменной «anzahlZeilen». Таким образом, «i» определяется как следующее i = 5. Я фактически изменил весь цикл на базовый цикл:
      for (var i=5; i==10; i  ){
     document.getElementById("ausgabe").innerHTML="x";
     }
     

Поэтому, когда я нажимаю на «Dreieck», снова должен появиться x, но этого не произошло.

 function dreieck() {
    var anzahlZeilen= parseInt(document.getElementById("anzahlZeilen").value);
    var ausgabe="";
  
    for (var i= anzahlZeilen; i===0; i= i-1){
        ausgabe= ausgabe   (i*"*")   "</br>";
        document.getElementById("ausgabe").innerHTML=ausgabe;
    }
} 
 div {
    font-family: monospace;
} 
 <!DOCTYPE html>

<html>
<head>
    <title></title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
<label>Anzahl Zeilen:</label> </br>
<input type="number" id="anzahlZeilen"> </br>
<button type="button" onclick="dreieck();">Dreieck</button>
<button type="button" onclick="schachbrett();">Schachbrett</button>
<button type="button" onclick="baum();">Baum</button>
</br>
<div id="ausgabe"></div>

    <script src="js/Code.js"></script>
</body>
</html> 

Комментарии:

1. Ваш ввод не инициализируется числом, поэтому значение не будет равно 0, если пользователь не изменит его на ноль. Таким образом, цикл не произойдет.

Ответ №1:

Вы проверяете, равен ли ваш i 10 в качестве условия. Это не имеет смысла, поскольку вы инициализируете его значением 5. Поскольку 5 не равно десяти, условие для выполнения вашего цикла неверно с самого начала.

Вы, вероятно, хотите проверить, меньше или равно i десяти (i <= 10).

Логика заключается в следующем: ваш цикл выполняет что-то, пока условие после for истинно. Итак, сначала вы инициализируете переменную, которую хотите использовать для подсчета. В данном случае это ваш i. Вы устанавливаете для него значение 5.

Затем вы проверяете, по-прежнему ли выполняется условие вашего цикла. Если это так, вы выполняете тело цикла.

После этого вы увеличиваете значение i .

Без повторной инициализации переменной вы начинаете сначала с проверки, по-прежнему ли выполняется условие.

Комментарии:

1. Где инициализируется значение? Ввод вообще не инициализируется

2. Оооо, я думал, что все наоборот, и это должно быть false и продолжается до тех пор, пока не станет true. Большое вам спасибо.

3. Рад слышать! Если мой ответ вам помог, пожалуйста, подумайте о том, чтобы проголосовать за него.

Ответ №2:

Ваше условие неверно

 for (var i= anzahlZeilen; i===0; i= i-1){
}
 

присваивает i anzahlZeilen (вероятно, что-то> 0). Вторая часть — это условие, то есть проверка, которая выполняется на каждой итерации цикла. Цикл останавливается, когда условие возвращает false .

Поэтому, когда anzahlZeilen значение больше 0, цикл немедленно останавливается, потому i === 0 что возвращает false .

Вы, вероятно, хотите

 for (var i= anzahlZeilen; i > 0; i= i-1){
}
 

То же самое для другого цикла.

 for (var i=5; i==10; i  )
 

Вы инициализируете i = 5 и проверяете i == 10 сразу после, что, очевидно, возвращает false , поэтому цикл останавливается. Снова вы хотите

 for (var i= 5; i < 10; i  ) 
 

Комментарии:

1. Имейте в виду, что цикл в первом фрагменте OP не имеет смысла. Он будет повторно устанавливать html для одного и того же элемента каждый раз, потому что поиск идентификаторов всегда будет возвращать первое совпадение

2. @Taplar Да, он всегда будет устанавливать один и тот же элемент, но он всегда будет добавлять что-то к содержимому строки.

3. Добавить? Нет. Заменить? Да. = это назначение / замена, а не добавление. = 'x' было бы добавлением

4. @Taplar ausgabe = ausgabe somethingelse объединяет ausgabe somethingelse и присваивает результат ausgabe . Таким образом, это (ну, не технически, а семантически) добавляет что-то к ausgabe … В конце цикла ausgabe будут содержаться объединенные строки из всех итераций, как бы вы ни называли это…

5. @derpirscher я не говорю об этом цикле, я говорю о самом первом цикле в OP, где для innerHTML установлено значение x .