【问题标题】:Java Caesar Cipher replacing a char in a string with an array valueJava Caesar Cipher 用数组值替换字符串中的字符
【发布时间】:2017-03-25 05:02:43
【问题描述】:

好的,所以对于一个学校项目,我正在尝试制作一种方法来获取文件,使用凯撒密码对其进行“加密”,然后将新加密的单词输出到输出文件,读取所有单词给我们留下一个单独的加密文件。

我遇到的问题是我得到了一个

“意外类型。必需:变量。找到:值”错误

每当我尝试用新字符替换字符时。

这是我的加密方法,希望这足以找出问题所在。

public static void encrypt(File inputFile, int key) throws FileNotFoundException
{
    char[] alpha = new char[26];
    for(char ch = 'a'; ch <= 'z'; ch++)
    {
        int i = 0;
        alpha[i] = ch;
        i++;
    }
    Scanner in = new Scanner(inputFile);
    while(in.hasNext())
    {   
        String word = in.next();
        word = word.toLowerCase();
        for(int i = 0; i < word.length(); i++)
        {
            for(int j = 0; j < alpha.length; j++)
            {
                if(word.charAt(i) == alpha[j])
                {
                    word.charAt(i) = alpha[j + key];       
                }
            } 
        }

    }  
}

【问题讨论】:

    标签: java arrays string encryption char


    【解决方案1】:

    因为字符串是不可变的,所以你不能这样做

    word.charAt(i) = alpha[j + key];
    

    考虑使用 StringBuilder,例如

        StringBuilder buf = new StringBuilder ();
        for(int i = 0; i < word.length(); i++)
        {
            for(int j = 0; j < alpha.length; j++)
            {
                if(word.charAt(i) == alpha[j])
                {
                    buf.append(alpha[j + key]);
                }
                else {
                    buf.append (word[i]); // ??
                }
            }
        }
    
        // do something with buf ??
    

    【讨论】:

    • 谢谢,这似乎解决了这个问题。只是好奇,您现在如何将其打印到文件中?很明显,我需要一次打印一个单词,但是我该如何在不每次都覆盖保存文件的情况下做到这一点。
    • @Redfox2045 我很高兴它有帮助。请考虑投票和/或接受此答案。
    • @Redfox2045 根据您的其他问题,请查看stackoverflow.com/questions/8563294/…
    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 2014-03-21
    • 2013-06-03
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    相关资源
    最近更新 更多