我正在为学校的家庭作业做一些Java密码。任务是将certian char的值更改为具有特定偏移量的新值,该偏移量由用户给出,范围从负数到正数(字母)。
现在我有负偏移的问题。我创建了一个带有Alphabet的String,它有助于找到新的char。例如:使用7
的偏移量,我得到了这个:encrypt(“TEST”) = “ALZA”
。因此,我的代码获取字符串值的索引,并使用此索引在新字符串的字母字符串中进行搜索。无论如何,当我现在有char 'E'
和负索引,即'-7'
时,它将为新char的新索引返回-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)会做的伎俩
实际上你需要数学模数,但%运算符不是那么