#javascript #html #for-loop
#javascript #HTML #for-loop
Вопрос:
Мой вопрос не о том, является ли результат моей функции или цикла правильным. Речь идет о том, что мой цикл не работает, что бы я ни делал.
Что я пытался исправить сам:
- Я проверил, правильно ли связаны html и JavaScript и запускается ли функция кнопкой с именем «Dreieck» вообще. Чтобы проверить, что я использовал
document.getElementById("ausgabe").innerHTML="x";
сразу после цикла, чтобы увидеть, работает ли он вообще, и это сработало. Это означает, что после нажатия на «Dreieck» в div появился x с идентификатором «ausgabe». - Тогда я подумал, может быть, мой цикл не работает, потому что он не получает никакого значения из переменной «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 .