1

我在java中为凯撒密码编写了一个程序,该程序将文本文件作为输入存储在我的计算机中,并根据用户提供的密钥值对其进行加密。然后必须将此加密文件以文本文件格式保存回计算机。我一直在试图找出我出错的地方,但我想我需要一些在 Java 方面更有经验的人的帮助。所以这是我的代码:

import java.util.Scanner;
import java.io.*;
import java.lang.*;

public class trial
{
    public static void main(String arg[])
    {
        String textFile="plaintext.txt";
        String cipheredFile=" ciphertext.txt";
        String line= null;
        FileReader fileReader=new FileReader(textFile);
        BufferedReader bufferedReader=new BufferedReader(fileReader);

        FileWriter fileWriter= new FileWriter(cipheredFile,true);
        BufferedWriter bufferedWriter= new BufferedWriter(fileWriter);


        int swvalue;
        Scanner input= new Scanner(System.in);
        System.out.println("Select 1: Encrypt, 2: Decrypt, 3: Get Frequency");
        int msg= input.nextInt();
        swvalue= Integer.valueOf(msg);

        switch(swvalue)


        {
        case 1:
            System.out.println("Encrypting the file");
            System.out.println(" Please enter a value for key");
            int keyvalue= input.nextInt();

            String[]  filearray=null;
            while(( line=bufferedReader.readLine())!=null)
            { 

            char[] toEncrypt=line.toCharArray();

                for(int i=0;i<toEncrypt.length;i++)
                {

                int charPosition= indexOf(line.charAt(i));
                int finalValue=(keyValue+charPosition)%26;
                char replaceValue=line.charAt(finalValue);
                line+=replaceValue;



                }


             bufferedWriter.write(line);
             bufferedWriter.newLine();

            }
            bufferedReader.close();
            bufferedWriter.close();

            break;


        case 2:


            System.out.println("Decrypt the file");
            break;



        case 3:

            System.out.println(" Get frequency");
            break;

        }
    }
}
4

1 回答 1

0

这是轮换的地方:

int charPosition= indexOf(line.charAt(i));
int finalValue=(keyValue+charPosition)%26;

但这不是轮换!

您应该移动,而不是移动字符串中的位置

int value = line.charAt(i);
int finalValue=(keyValue+value)%26;
于 2015-10-06T22:07:54.223 回答