如何在Java中进行左侧凯撒转换?

时间:2017-12-14 03:07:09

标签: java arrays loops

我已经想出如何使用这段代码右移一个字符串:

for (int i = 0; i < phraseArray.length; i++) {
  phraseArray[i] = (char) ((phraseArray[i] + add - (int)'a') % 26 + (int)'a'); 
}

如果移位太大,这允许我将字母表末尾附近的字符(例如“z”)循环到开头附近的字符(例如“a”)。但是,我似乎无法转移到 left 并且在开始循环附近有一个字符到接近结尾的字符。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

由于这是一个凯撒班次,你知道所用字母表中的字母数量(我认为它是26个字母),你所要做的就是加上26,因为-1&#34;等于&#34;在这种情况下为25。当然%&#34;添加&#34;变量,以防止它大于26.以下是你的程序与小变化,显示我的意思:

public static void main(String[] args){
    char[] phraseArray = {'a', 'b', 'c'};
    int add = -1;

    for (int i = 0; i < phraseArray.length; i++) {
        if(add>=0) {
            phraseArray[i] = (char) ((phraseArray[i] + add - (int) 'a') % 26 + (int) 'a');
        }else{
            phraseArray[i] = (char) ((phraseArray[i] + (26+(add%26)) - (int) 'a') % 26 + (int) 'a');
        }
        System.out.println(phraseArray[i]);
    }

    return;
}

如果你想让它总是在左边做,应该是这样的:

for (int i = 0; i < phraseArray.length; i++) {
        phraseArray[i] = (char) ((phraseArray[i] + (26+(-add%26)) - (int)     'a') % 26 + (int) 'a');
    System.out.println(phraseArray[i]);
}

完整主要在下面:

public static void main(String[] args){
    int[] abc = {2, 4, 8, 3};
    char[] phraseArray = {'a', 'b', 'c'};
    int add = 1;

    for (int i = 0; i < phraseArray.length; i++) {
            phraseArray[i] = (char) ((phraseArray[i] + (26+(-add%26)) - (int) 'a') % 26 + (int) 'a');
        System.out.println(phraseArray[i]);
    }

    return;
}