【问题标题】:How do you shift char values in an arraylist?如何在 arraylist 中移动 char 值?
【发布时间】:2017-05-17 19:06:42
【问题描述】:

我正在尝试编写一个密码项目,其目标是让用户发送文本和班次号码。结果将被相应地打印。例如,如果我发送移位值为 1 的“Hello World”,它应该打印:“Gfmmp Xrsme”。问题是我在转换时遇到了麻烦,因为我有一个 char 值(字母表)的数组列表。

这是我目前所拥有的:

                import java.util.ArrayList;

                public class CaesarCipher
                {
                int shift;
                String inputText;
                ArrayList<String> arr;
                ArrayList<String> exchange = new ArrayList<String>();

                public CaesarCipher()
                {
                        shift = 0;
                        inputText = "";
                }

                public CaesarCipher(int s, String iT)
                {
                        shift = s;
                        inputText = iT;
                }

                public void alphabet()
                {
                        arr = new ArrayList<String>();
                        arr.add("A");
                        arr.add("B");
                        arr.add("C");
                        arr.add("D");
                        arr.add("E");
                        arr.add("F");
                        arr.add("G");
                        arr.add("H");
                        arr.add("I");
                        arr.add("J");
                        arr.add("K");
                        arr.add("L");
                        arr.add("M");
                        arr.add("N");
                        arr.add("O");
                        arr.add("P");
                        arr.add("Q");
                        arr.add("R");
                        arr.add("S");
                        arr.add("T");
                        arr.add("U");
                        arr.add("V");
                        arr.add("W");
                        arr.add("X");
                        arr.add("Y");
                        arr.add("Z");
                }

                public void convert()
                {
                    String revisedText = inputText.replaceAll("\\s","");
                    //Turn revisedText into an array and match it with array above
                    revisedText.toUpperCase();
                    int j = 1;
                    String letter = "";

                        for (int i = 0; i < revisedText.length(); i++)
                        {
                            exchange.add(revisedText.substring(i, j));
                            j++;
                        }
                }

                public void shift()
                {
                    shift = shift % 26 + 26;
                    ArrayList<String> newArr = new ArrayList<String>(); // array with shifted values
                    int pos = 0;

                    for(int r = 0; r < exchange.size(); r++)
                    {
                     if(arr.get(r).equals(exchange.get(r)))
                        arr.indexOf(r) + shift = pos;
                    }


                }

                public String toString()
                {
                        return "";
                }

                }

【问题讨论】:

    标签: java encryption arraylist cryptography shift


    【解决方案1】:

    这里是一个快速 for 循环的例子

        String string = "Hello World";
        String newPhrase = "";
        int shift = 1;
        for(int i = 0; i < string.length(); i++){
            if(string.charAt(i) != ' ')
                newPhrase += (char)(string.charAt(i) + shift);
            else
                newPhrase += ' ';
        }
        System.out.println(string + " -> " + newPhrase);
    

    输出

    Hello World -> Ifmmp Xpsme
    

    但是您应该注意,有几个边缘情况我没有检查。一旦你理解了上面的代码,你应该能够找到我所说的边缘情况。

    【讨论】:

    • 边缘情况是什么意思?抱歉,我是初学者。
    • 一个边缘情况会是这样的,如果我们在字符串中找到一个像 W 这样的字符,而我们的 shift 是 5。我的代码不会换行并抓取 B 字符,而是抓取 \跨度>
    • 你如何解决这个问题
    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多