我一直被困在我任务的最后一部分,时间最长。我正在尝试使用模数循环字母表。 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;
}
答案 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;
}