gpt4 book ai didi

java - 凯撒密码帮助 ASCII 循环

转载 作者:行者123 更新时间:2023-12-02 05:37:30 25 4
gpt4 key购买 nike

我正在尝试创建凯撒密码,并且我将输入作为程序中的硬代码。当我运行该程序时,它可以工作,但所有应该是“Y”的东西都是“?”。我不知道如何循环 ASCII,因此当它小于 65 时,它会添加 26 或循环回 90。这是我到目前为止的代码。移位为-3即可破译它。

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

最佳答案

您可以检查结果值是否超出大写字母的范围并进行适当调整:

char cipher(char input,int shift){
shift%=26; //incase the shift is really big
input+=shift; //first shift the input charachter
if(input>'Z') //if its over 'Z' shift it down into range
input-=26;
else if(input <'A') //if its below 'A' shift it up into range
input+=26;
return input;
}

此外,使用 String[] 作为输入会更容易,而不是计算每个行的结束位置

关于java - 凯撒密码帮助 ASCII 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com