如何在Java中保留数组中的字符?

时间:2017-05-22 18:32:50

标签: java arrays string elements shift

这就是我现在所拥有的:

class encoded{
    public static void main(String[] args){
        int shift = In.getInt();
        String s1 = "bool";
        char[] ch=s1.toCharArray();
        for(int i=0;i<ch.length;i++){  
            char c = (char) (((ch[i] - 'a' - shift) % 26) + 'a');
            System.out.print(c);
        }
    }
}

此代码用于移动字符串中的所有字符,但是我希望它移位。例如,当我向左移动'abc'1时,它会返回'ab'。我想要的是让角色绕回到'z',这样移位的'abc'就变成了'zab'。我该怎么做呢?当他们向左移动'a'时,角色需要始终回绕到z,并且当他们向右移动'z'时需要回绕到a(这可以通过改变“'a'来完成 - 转移到'a'+'转移'。 非常感谢提前!

2 个答案:

答案 0 :(得分:0)

不是为你做功课,而是给你一些提示:

Do Until counter = 3

你知道,你正在无条件地进行轮班操作 。相反,请阅读有关使用if语句的信息。您想要将您的计划不同的内容与char c = (char) (((ch[i] - 'a' - shift) % 26) + 'a'); 的值进行比较。在某些情况下,只需&#34; shift&#34;,其他人替换值。

答案 1 :(得分:0)

问题是模运算可以产生negative results。 在Java8中,您可以使用Math.floorMod作为替代方法:

class Main{
    public static void main(String[] args){
        int shift = 1;
        String s1 = "abool";
        char[] ch=s1.toCharArray();
        for(int i=0;i<ch.length;i++){  
            char c = (char) ((Math.floorMod((ch[i] - 'a' - shift), 26)) + 'a');
            System.out.print(c);
        }
    }
}

另一种方法是使用char c = (char) ( (((ch[i] - 'a' - shift) % 26) + 26) % 26 + 'a');