2015-04-08 2 views
0

Я застрял в этой последней части своего задания в течение самого долгого времени. Я пытаюсь пропустить алфавит с помощью модуля. delta - количество букв, которые вы должны перемещать вперед или назад, чтобы получить реальную букву. SO, если заданы getchars («H», - 2), функция должна возвращать F. Однако возникает проблема, если chars.charAt (chars.getIndexOf (data.charAt (i))) когда-либо равняется числу меньше 0 Я хочу, чтобы моя функция («А», -1) или любое отрицательное число, и вернуть ее «Z».Использование модуля для петли через

Это задание для класса, поэтому, если возможно, держите его только в модуле. Я работаю над этой последней частью как 2 часа.

function getChars(data,delta) 
{ 
    var chars; 
    var i; 
    var foundAt; 
    var newString; 

    chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    data = data.toUpperCase(); 
    delta = Math.min(chars.length, delta); 
    i = 0; 
    newString = ""; 

    while (i < data.length) 
    { 
     if(delta <= 0) 
     { 
      foundAt = (chars.indexOf(data.charAt(i)) + delta) ;window.alert(foundAt) 
      //newString = newString + chars.charAt(foundAt); 
      //i = i + 1; 
     } 
     else if((chars.indexOf(data.charAt(i)) < 0)) 
     { 
      foundAt = data.charAt(i); 
      newString = newString + foundAt; 
      i = i + 1; 
     } 
     else 
     { 
     foundAt = ((chars.indexOf(data.charAt(0 + i)) + delta)) % chars.length;window.alert(foundAt); 
     newString = newString + chars.charAt(foundAt);window.alert(newString); 
     i = i + 1; 
     } 
    } 
    //return newString; 
} 
+0

Простой, если заявление - У вас есть 26 букв. if letter_ID <0, letter_ID = 25. (25, потому что js имеет индекс 0) – ggdx

+0

почему вам нужен цикл while? не можете ли вы просто разработать индекс буквы, а затем добавить дельта, а затем взять модуль? – samgak

ответ

0

Чтобы быть гибким, вы можете использовать i = chars.length - 1; и первый после этого сделать found at.

0

Вы должны использовать у вас есть modulus function:

function modulus(n,m) { 
    return ((n%m)+m)%m; 
}; 

С вашего следующего кода:

function getChars(data,delta) 
{ 
    var chars; 
    var i; 
    var foundAt; 
    var newString; 

    chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    data = data.toUpperCase(); 
    i = 0; 
    newString = ""; 

    while (i < data.length) 
    { 
     newString += chars.charAt(modulus(chars.indexOf(data[i])+delta,26)) 
     i++; 
    } 
    return newString; 
} 
+0

Вы можете объяснить эту часть: модуль (chars.indexOf (data [i]) + delta, 26) – user2009653

+0

'chars.indexOf (data [i])' возвращает индекс вашего символа 'data [i]' в вашем ' список символов. И мы добавляем дельта, а затем вычисляем модуль с 26, чтобы получить число от 0 до 25 – jmgross

+0

Извините, но мы еще не узнали списки, поэтому я не знаком с ними. Нужно ли просто передать chars.indexOf (данные (i))? Я спрашиваю, потому что я пробовал и терпел неудачу. – user2009653

0

Почему вы хотите, чтобы цикл?

Вы могли бы попробовать StrPos эквивалент примерно так:

var getChars = function (data, delta) { 
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    var index = (chars + '').indexOf(data, 0); 
    var pos = (index === -1) ? false : index; 
    pos += delta; 
    var max_pos = chars.length; 
    pos += max_pos; 
    var new_pos = (pos % max_pos); 
    return chars[new_pos]; 
} 

getChars('A', -1); // Z 
getChars('B', +2); // D 
getChars('C', -10); // S 
Смежные вопросы