2013-06-20 2 views
-4

Может ли кто-нибудь сказать мне, почему этот скрипт приводит к бесконечному циклу?Бесконечные петли - не знаете почему?

var words = ' '; 
var spaces = /\s{9}/; 
var p; 
p = spaces.test(words); 

do { 
    words = prompt("Test ", " "); 
} 
while (p != true); 

var array = words.split(" "); 
for(i = 0; i < array.length; i++) { 
    document.write(array[i] + "<br/>"); 
} 

ответ

5

do {ничего с p} пока (условно p), очевидно, будет продолжать работать вечно. Вы имели в виду это:

var words = ' ', spaces = /\s{9}/, p; 
do { 
    p = spaces.test(words); 
    words = prompt("Test ", " "); 
} 
while (!p); 
+1

... если и только если p является ложным, когда вы вошли в цикл – occulus

+1

, конечно, но это явно будет, так как '' не будет соответствовать 9 пробелам. –

+0

@ Mike'Pomax'Kamermans Спасибо, Майк, все же застрял. Когда я смотрю на скрипт, мне говорят: «проверьте, есть ли 9 пробелов, затем продолжайте до тех пор, пока не будет 9 пробелов ... повторите цикл». Но мой браузер этого не видит. Я использую Safari в Mac OS ... что не имеет значения для этой проблемы. – Adam

2

Вы не меняете P каждый раз, когда будете петли. P всегда будет тем, что было до того, как вы вошли в цикл

0

Правильно, я думаю, что регулярное выражение не делает то, что вы думаете. \ s {9} будет искать 9 пробелов подряд. regex кажется довольно сложным инструментом для использования, поэтому я сделал то, что, как я думаю, вы хотите использовать сплит, что, похоже, вы уже знакомы.

var words = ' '; 
var p; 

do { 
    words = prompt("Test", ""); 
    p = words.split(" "); 
} 
while (p.length != 9); 

var array = words.split(" "); 
for(i = 0; i < array.length; i++) { 
    document.write(array[i] + "<br/>"); 
} 

Возможно, возможно?

+0

все еще застрял в цикле – Adam

+0

Можете ли вы объяснить, почему реквестер застревает в цикле и как это решение может исправить это? –

+0

@aland Спасибо, все еще кажется застрявшим. Мне просто придется продолжать работать над этим. То, что у вас здесь имеет смысл, но, похоже, не работает. – Adam