负字符串索引

时间:2016-12-11 11:16:56

标签: java

我正在为学校的家庭作业做一些Java密码。任务是将certian char的值更改为具有特定偏移量的新值,该偏移量由用户给出,范围从负数到正数(字母)。

现在我有负偏移的问题。我创建了一个带有Alphabet的String,它有助于找到新的char。例如:使用7的偏移量,我得到了这个:encrypt(“TEST”) = “ALZA”。因此,我的代码获取字符串值的索引,并使用此索引在新字符串的字母字符串中进行搜索。无论如何,当我现在有char 'E'和负索引,即'-7'时,它将为新char的新索引返回-3的值(我希望这是有意义的)。由于索引'-3'上没有字符,我收到错误。

那么如何才能访问字符串的结尾而不是越来越多地进入负索引号?

3 个答案:

答案 0 :(得分:3)

添加26然后mod 26:

i = (i + 26) % 26;

这始终适用于低至-26的索引。如果这还不够,只需添加一些零:

i = (i + 26000000) % 26;

答案 1 :(得分:2)

您的一般问题似乎是字母仅由26个索引表示,但您使用的实际索引变量可能大于26,甚至小于零(负数)。解决此问题的一种方法是使用mod运算符安全地包装索引,始终指向包含有效字母的范围。

这是可以做到这一点的逻辑:

if (index < 0) {
    index = (index % 26) + 26;
}
else {
    index = index % 26;
}

假设字母E是第5位并且您重新分配了-7,这意味着新索引将为-2。可以使用上面的逻辑映射这个新位置,如下所示:index = -2在这种情况下:

5 - 7 = -2
(-2 % 26) + 26
-2 + 26
24

第24位的字符是字母X

答案 2 :(得分:0)

如果您可以将移位值约束为正数,则可以使用余数运算符:

int newIndex =(index + shift)%26

如果有预期的负面影响:

int newIndex = Math.floorMod(inndex + shift,26)会做的伎俩

实际上你需要数学模数,但%运算符不是那么