为了账号安全,请及时绑定邮箱和手机立即绑定

Java Enhanced Caesar Cipher:了解for循环行为的问题

Java Enhanced Caesar Cipher:了解for循环行为的问题

翻阅古今 2021-10-20 14:58:53
这是一个凯撒密码,在调试时我发现这个循环运行的次数超过了 mod 的值。我希望输出1,2,3,4 fklm然后停止。有问题的循环是:for(int k=1;k<=mod;k++).方法中使用的字符串是"abcd".这是一个凯撒密码,在调试时我发现这个循环运行的次数超过了 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;}
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

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


modShiftKey=(key+mod);

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


String text = "";

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

    System.out.print("" + k + (k == mod ? " " : ","));

}

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


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 188 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信