使用模数循环

时间:2015-04-08 07:53:41

标签: javascript loops

我一直被困在我任务的最后一部分,时间最长。我正在尝试使用模数循环字母表。 delta是您必须向前或向后移动才能获得真实字母的字母数。因此,如果给出getchars(“H”, - 2),则该函数应返回F.但是,如果chars.charAt(chars.getIndexOf(data.charAt(i)))等于小于0的数字,则会出现问题我希望能够给出我的功能(“A”, - 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;
}

2 个答案:

答案 0 :(得分:0)

为了保持灵活性,您可以使用i = chars.length - 1;,然后再使用found at

答案 1 :(得分: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;
}