Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / цикл while / 12 сообщений из 12, страница 1 из 1
02.06.2016, 07:26
    #39248597
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
Добрый день. Понимаю что вопрос может быть детским для вас. Я только начал изучать js. C циклом for получилось сделать таблицу умножения. А вот тоже самое с while не получается. Вкладываю один в другой и не идет. По отдельности все работает.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   
 var i=1;
		var k=1;
		var rez=0;
		while(i<10){
			while(k<10){
				rez=k*i;
				document.write(rez + " ");
				k++;
			}
			document.write("<br>");
			i++;
		}
...
Рейтинг: 0 / 0
02.06.2016, 07:58
    #39248606
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
vdekameronВкладываю один в другой и не идет. По отдельности все работает.
Описать проблему можно было и нормально :) Первую строку таблицы скрипт выводит же, верно?

А дальше выполняется только document.write("<br>") , так как Вы значение k не сбрасываете и условие while(k<10) перестаёт выполняться, а вместе с ним и код, что выводит результат умножения k на i .
...
Рейтинг: 0 / 0
02.06.2016, 08:02
    #39248608
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
Зацените:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var i = 1, j = 1;

while (i < 10) {
  while (j < 10) {
    document.write(i * j++ + " ");
  }
      
  document.write("<br>");
      
  i++; j = 1;
}
...
Рейтинг: 0 / 0
02.06.2016, 08:25
    #39248614
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
И если проводить аналогию с for , то получается..

что используя for Вы определяете значение k внутри цикла:
Код: javascript
1.
2.
3.
for (var i = 1; i < 10; i++) {
  for (var k = 1; k < 10; k++) {
...


а в случае с while вынесли это наружу:
Код: javascript
1.
2.
3.
4.
5.
6.
var i = 1;
var k = 1;

while (i < 10) {
  while (k < 10) {
...


и очевидно получили другую логику работы :)
...
Рейтинг: 0 / 0
02.06.2016, 09:09
    #39248638
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
skyANAОписать проблему можно было и нормально :)
Извините, с этим всегда проблемы(.
skyANAтак как Вы значение k не сбрасываете и условие while(k<10) перестаёт выполняться
Вот этого я как раз и не учел. Был затык. Я почему-то думал что он должен отрабатывать как for. Недооценил значения слова while)).
skyANAЗацените:
Заценил. Все ,конечно, заработало. Спасибо!!!
...
Рейтинг: 0 / 0
02.06.2016, 09:16
    #39248644
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
skyANAИ если проводить аналогию с for , то получается..

что используя for Вы определяете значение k внутри цикла:
Код: javascript
1.
2.
3.
for (var i = 1; i < 10; i++) {
  for (var k = 1; k < 10; k++) {
...



а в случае с while вынесли это наружу:
Код: javascript
1.
2.
3.
4.
5.
6.
var i = 1;
var k = 1;

while (i < 10) {
  while (k < 10) {
...



и очевидно получили другую логику работы :)

Разве в этом дело? Вот я вынес и в цикле for определение переменной за пределы. Но логика не поменялась.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var i=1;
		var k=1;
		var rez=0;
		for(i=1; i<10; i++){
			document.write("<tr>")
			for(k=1; k<10; k++){
				rez=k*i;
				document.write("<td style='width: 15px;'>" + rez + "</td>");
			}
			document.write("</tr>");
		}
		document.write("</table>");


Мне кажется тут дело именно в том что for и while изначально имеют немного разную логику. Конечно спорить не буду) ибо это глупо)
...
Рейтинг: 0 / 0
02.06.2016, 10:03
    #39248701
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
vdekameron Мне кажется тут дело именно в том что for и while изначально имеют немного разную логику. Конечно спорить не буду) ибо это глупо)
Однозначно! Причем что характерно так не только в JS.
Но такой while (k < 10) эквивалентен for(;k<10;), то есть всю работу по изменению k надо производить где то еще.
В таком варианте for(k=1;k<10;k++) вся работа по изменению k происходит "внутри", тело цикла выполняется начиная с k=1, пока k < 10 и на каждом шаге увеличивается на 1.
Можно увеличивать на 2 for(k=1;k<10;k++++)
Можно "никогда" не закончить for(k=1;k<10;k--)
...
Рейтинг: 0 / 0
02.06.2016, 11:45
    #39248864
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
vdekameronРазве в этом дело? Вот я вынес и в цикле for определение переменной за пределы. Но логика не поменялась.
Давайте придём к одинаковой терминологии: https://learn.javascript.ru/while-for

Код: javascript
1.
2.
3.
for (начало; условие; шаг) {
  // ... тело цикла ...
}


фактически Вы вынесли начало цикла, а не определение переменной.
то есть сделали так (если записать через for ):
Код: javascript
1.
2.
3.
for (; k < 10; k++) {
  // ... 
}


так понятнее?
...
Рейтинг: 0 / 0
02.06.2016, 13:41
    #39249053
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
skyANAфактически Вы вынесли начало цикла, а не определение переменной.
то есть сделали так (если записать через for ):
Код: javascript
1.
2.
3.
for (; k < 10; k++) {
  // ... 
}



Честно не могу понять к чему Вы клоните. Ну и что что я вынес начало цикла...это же идентично тому, если начало цикла использовать в скобках. ....это я ссылаюсь на ту ссылку, которую Вы дали мне.
...
Рейтинг: 0 / 0
02.06.2016, 14:01
    #39249093
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var k=1;
		var rez=0;
		for(i=1; i<10; i++){
			document.write("<tr>")
			for(k=1; k<10; k++){
				rez=k*i;
				document.write("<td style='width: 15px;'>" + rez + "</td>");
			}
			document.write("</tr>");
		}
		document.write("</table>");



из цикла вынесено определение переменной, но в цикле ей присваивается значение
for(k=1; k<10; k++){
в этом всё дело
...
Рейтинг: 0 / 0
03.06.2016, 08:31
    #39249731
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
vdekameronskyANAфактически Вы вынесли начало цикла, а не определение переменной.
то есть сделали так (если записать через for ):
Код: javascript
1.
2.
3.
for (; k < 10; k++) {
  // ... 
}



Честно не могу понять к чему Вы клоните. Ну и что что я вынес начало цикла...
У Вас в каждой из десяти итераций по i начинается цикл по k .
В варианте с for Вы оставляете начало цикла по k внутри тела цикла по i .
А в своём варианте с while Вы вынесли начало цикла по k из тела цикла по i .

И очевидно, что получается разная логика.

И давайте это проверим. Перепишем for так как Вы написали свой while :
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var i, k;

i = 1;
k = 1;

for (; i < 10; i++) {
  for (; k < 10; k++) {
    document.write(k * i + " ");
  }
  
  document.write("<br>");
}


Получим аналогичный результат:
Код: html
1.
1 2 3 4 5 6 7 8 9 <br><br><br><br><br><br><br><br><br>



А теперь наоборот перепишем while так, как for :
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var i, k;

i = 1; // начало цикла по i

while (i < 10) {
  k = 1; // начало цикла по k 

  while (k < 10) {
    document.write(k * i + " ");

    k++;
  }

  document.write("<br>");

  i++;
}


И получим нужный нам результат:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
1 2 3 4 5 6 7 8 9 <br>
2 4 6 8 10 12 14 16 18 <br>
3 6 9 12 15 18 21 24 27 <br>
4 8 12 16 20 24 28 32 36 <br>
5 10 15 20 25 30 35 40 45 <br>
6 12 18 24 30 36 42 48 54 <br>
7 14 21 28 35 42 49 56 63 <br>
8 16 24 32 40 48 56 64 72 <br>
9 18 27 36 45 54 63 72 81 <br>



Вывод очевиден: когда циклы написаны одинаково, они и работают одинаково.
...
Рейтинг: 0 / 0
03.06.2016, 14:39
    #39250148
vdekameron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл while
skyANA,

Спасибо Вам большое, что не поленились и буквально разжевали) Понял!!
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / цикл while / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]