我想创建一个凯撒密码,我有输入作为程序中的硬代码。当我运行该程序时,它的工作原理是,但应该是“Y”的所有内容都是“?”。我无法弄清楚如何循环ASCII,所以当它小于65时,它会增加26或循环回到90.下面是我到目前为止的代码。这个转变是-3来破译它。凯撒密码帮助ASCII循环
import java.util.Scanner;
public class Caesar {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter the shift value");
int shiftValue = in.nextInt();
String ciphertext = "WKHQHZRUNLQJDQGFBEHUVHFXULWBGHSDUWPHQWDWURVHVWDWHF ROOHJHRIIHUVDFHUWLILFDWHSURJUDPLQLQIRUPDWLRQVHFXULWBDW DOOIHGHUDOWUDLQLQJOHYHOVWKHSURJUDPFHUWLILHVWKHVWXGH QWVVDWLVIBLQJSURJUDPUHTXLUHPHQWVDUHWUDLQHGWRWKHIHGH UDOQVWLVVLFQVVLVWDQGDUGVIRULQIRUPDWLRQVBVWHPVVHFXUL WBSURIHVVLRQDOVGHVLJQDWHGDSSURYLQJDXWKRULWLHVLQIRUPD WLRQVBVWHPVHFXULWBRIILFHUVVBVWHPVFHUWLILHUVDQGULVNDQ DOBVWUHVSHFWLYHOB";
//System.out.print(ciphertext);
System.out.println();
//I take each character, convert it to its ascii value, subtract 3,
//then convert back to a character
for(int i=0; i <= 48; i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
System.out.println();
for(int i=49; i <= 102; i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
System.out.println();
for(int i=103; i < 152; i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
System.out.println();
for(int i=152; i < 200; i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
System.out.println();
for(int i=200; i < 248; i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
System.out.println();
for(int i=248; i < 307; i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
System.out.println();
for(int i=307; i < 348; i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
System.out.println();
for(int i=348; i < ciphertext.length(); i++) {
System.out.print((char)((int)ciphertext.charAt(i)+shiftValue));
}
//System.out.print((char)((int)ciphertext.charAt(1)+shiftValue));
//System.out.print((char)((int)ciphertext.charAt(2)+shiftValue));
//System.out.print((char)((int)ciphertext.charAt(3)+shiftValue));
//System.out.print((char)((int)ciphertext.charAt(4)+shiftValue));
//System.out.print((char)((int)ciphertext.charAt(5)+shiftValue));
//System.out.println();
}
} // end main
// end class Assign1
+1
如果为'ciphertext'包含一个短得多的字符串,只显示不起作用的部分,那么您的示例将更容易阅读。你也可以删除所有的for循环。 –
+1
你需要在纸上逐步写出你的逻辑,找出你如何循环访问字符串。如果你在纸上做这个,你会完全循环七次吗?不,我不这么认为。你只需循环**一次**。所以在这里做同样的事情。 –