0

这是一个凯撒密码,在调试时我发现这个循环的运行超过了 mod 的值。我希望输出1,2,3,4 fklm然后停止。有问题的循环是:

for(int k=1;k<=mod;k++). 

该方法中使用的字符串是"abcd".

输出图像包括在下面

public static String encrypt(String plainText)
{
    plainText=plainText.toLowerCase();
    String text="";
    for(int i=0;i<plainText.length();i++)
    {
        if(i==0)
        {
         int letterPosition=ALPHABET.indexOf(plainText.charAt(i));
         int shiftValue=(key+letterPosition)%26;
         char encrypted=ALPHABET.charAt(shiftValue);
         text+=encrypted;
        }
        else if(i>0)
        {
            int letterPosition=ALPHABET.indexOf(plainText.charAt(i));
                for(int k=1;k<=mod;k++)
                {
                     modShiftKey=(key+k);
                     System.out.println(k);
                }
            int shiftValue=(modShiftKey+letterPosition)%26;
            char encrypted=ALPHABET.charAt(shiftValue);
            text+=encrypted;
        }
    }
    return text;


}
4

1 回答 1

0

听起来内部for循环可以完全替换为以下行:

modShiftKey=(key+mod);

然后可以在第一个 for 循环之前添加一个新的 for 循环:

String text = "";
for (int k = 1; k <= mod; k++) {
    System.out.print("" + k + (k == mod ? " " : ","));
}

(当然,假设您不想将 1、2、3、4 存储在text变量中)

于 2018-10-01T10:10:46.813 回答