2015-09-03 3 views
0

Когда я запускаю это, кажется, что он застрял в бесконечном цикле, но для жизни меня не вижу, что случилось.Является ли это бесконечным циклом? -Coderbyte exercise

Проблема, которую я делал, было это: http://coderbyte.com/CodingArea/GuestEditor.php?ct=Swap%20Case&lan=JavaScript

«Использование языка JavaScript, имеют функцию SwapCase (ул) принимает параметр ул и поменять регистр каждого символа, например:. Если строка» Hello World ", выход должен быть hELLO wORLD. Пусть числа и символы остаются такими, какие они есть".

function SwapCase(str) { 
    // code goes here 
    // loop through, check case with functions isUpper or isLower 
    // if isUpper --> .toLowerCase; if isLower --> .toUpperCase 
    for (var i = 0; i < str.length; i++) { 
    if (isUpper(str[i])) 
     str = str.slice(0, i) + str[i].toLowerCase() + str.slice(i); 
    else if (isLower(str[i])) 
     str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i); 
    } 

    return str;   
} 

function isLower(char) { 
    var alphabet = 'abcdefghijklmnopqrstuvwxyz'; 
    for (var j = 0; j < alphabet.length; j++) { 
    if (char === alphabet[j]) return true; 
    } 
} 
function isUpper(char) { 
    var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    for (var k = 0; k < alphabet.length; k++) { 
    if (char === alphabet[k]) return true; 
    } 
} 
+0

# 1: «Бесконечный цикл»? # 2: что вам скажет ваш отладчик? – KevinDTimm

ответ

0

Его эта строка кода:

str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i); 

"привет" .slice (я), когда я = 0 дает вам "привет". Таким образом, после каждой итерации str становится h + hello; он + привет. и ваша строка продолжает расти.

Одно исправление заключается в сохранении str.length перед началом работы.

var strLen = str.length; 
for (var i = 0; i < strLen; i++) { 

Это заставит цикл запустить исходную длину строки.

ИЛИ вы можете исправить с помощью:

str = str.slice(0, i) + str[i].toLowerCase() + str.slice(i + 1); 
else if (isLower(str[i])) 
str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i + 1); 

Обратите внимание на str.slice (я + 1);

Смежные вопросы