Java 跳转加密帮助?代码没有意义
跳转加密:提示用户输入一个介于2和当前消息长度平方根之间的整数(跳转值)。现在想象一下,我们将以表的形式编写当前消息,使用与跳转值相同的行数。原始消息中的字符顺序将是 第一列后接第二列,以此类推。例如,跳转值为5时,原始消息将采用表格形式:Java 跳转加密帮助?代码没有意义,java,Java,跳转加密:提示用户输入一个介于2和当前消息长度平方根之间的整数(跳转值)。现在想象一下,我们将以表的形式编写当前消息,使用与跳转值相同的行数。原始消息中的字符顺序将是 第一列后接第二列,以此类推。例如,跳转值为5时,原始消息将采用表格形式: T i e g a h s i m g i o n e e s t r a s . h i l s 要完成加密,请逐行显示加密的消息,“Tieg ahs imgi oneestras.hils”以显示上述消息。提示:这可以通过嵌套循环一步完
T i e g a
h s i m g
i o n e e
s t r a s .
h i l s
要完成加密,请逐行显示加密的消息,“Tieg ahs imgi oneestras.hils”以显示上述消息。提示:这可以通过嵌套循环一步完成!解决方案中不需要数组或实际表
所以我在下面附上了我用过的代码,但在打印消息时,我似乎只差一列
public static String jumpEncrypt(String message, int jumpValue) {
String jencrypt = "";
for (int i = 0; i < jumpValue; i++) {
for (int j = 0; j < (jumpValue); j++) {
jencrypt += message.charAt(i + j*jumpValue);
}
}
return jencrypt;
}
公共静态字符串jumpEncrypt(字符串消息,int jumpValue){
字符串jencrypt=“”;
对于(int i=0;i
jumpValue为5的原始消息的预期输出应该是“Tieg-ahs-imgi-oneestras.hils”,但我得到的输出是“Tieg-hs-imi-onestras-hils”因此,使用此for循环代码,他们的操作不多,但可能需要简单的修复 也许j应该等于一个so message.charAt(i+j*jumpValue);它不应该等于 0+0*jumpValue),因为这将使所有内容都为0,并将所有内容清除为基本内容 所以jencrypt=0;不管它的初始值是多少 因此,对于int i=0,可能是jumpValue-1 试着做地板循环的数学部分,看看为什么它加起来不正确
for (int i = 0; i < jumpValue - 1; i++) {
for (int j = 0; j < (jumpValue); j++) {
jencrypt += message.charAt(i + j*jumpValue);
}
}
return jencrypt;
for(int i=0;i
我不完全确定我是否正确,但我尽了最大努力去理解我对编码还是相当陌生的!) 如果我使用
for(int j=0;j你将I
和j
迭代到jumpValue
。这意味着你可以加密的最大消息是jumpValue*jumpValue)
-或者大小写为25个字符,你的字符串已经更长了(你可以看到你的“正确”矩阵是6x5)
因此,您需要迭代器j
,而不是jumpValue
,而是消息长度除以jumpValue
——并且需要将其四舍五入到最接近的整数
这也意味着矩阵最后一列中的某些字符来自比输入字符串长度更长的位置,因此需要对此进行检查
下面的代码处理这两个问题:
public static String jumpEncrypt(String message, int jumpValue) {
String jencrypt = "";
for (int i = 0; i < jumpValue; i++) {
for (int j = 0; j < (message.length() + jumpValue - 1) / jumpValue; j++) {
int index = i + j * jumpValue;
if (index < message.length()) {
jencrypt += message.charAt(index);
}
}
}
return jencrypt;
}
公共静态字符串jumpEncrypt(字符串消息,int jumpValue){
字符串jencrypt=“”;
对于(int i=0;i
请注意,表达式(message.length()+jumpValue-1)/jumpValue
(即message.length()/jumpValue
,但四舍五入向上)在两个循环中都是常量,因此为了提高效率,最好在循环之前将其提取到局部变量中,为了避免对每个循环的表达式进行不必要的计算。您是否尝试过它返回StringIndexOutOfBounds errorHi,因此它基本上返回与我得到的消息相同的消息,但不会遍历所有行,并缩短消息,同时仍然得到我之前遇到的问题。非常感谢你!您是否尝试过使用加号1,因为程序开始时似乎已经短了。实际上,您没有在每个for循环中使用两次jumpValue,而是尝试过使用message.length;?所以加1返回“Tieg-hs-imi-onestras-hilsieg a”,这更接近于它没有省略“a”,但我们应该得到的返回是“Tieg-ahs-imgi-oneestras.hils”。我没有,我应该用message.length()替换哪一个?你介意解释一下为什么或者告诉我你在第一个for循环中做了什么吗?