Java 这个密码程序哪里出了问题?

Java 这个密码程序哪里出了问题?,java,Java,我需要编写一个程序,将一个人的名字、中间名和姓氏进行加密:用户输入的每个字母都会根据所选的密钥进行循环移位。例如,如果密钥为1,原始字母为“A”,则加密字母将为“B”。如果密钥为3且原始字母为“b”,则加密字母为“e”。如果密钥为3且原始字母为“z”,则加密字母为“c” 这是我的密码: import java.util.Scanner; public class Cipher { public static void main(String []main){ Scann

我需要编写一个程序,将一个人的名字、中间名和姓氏进行加密:用户输入的每个字母都会根据所选的密钥进行循环移位。例如,如果密钥为1,原始字母为“A”,则加密字母将为“B”。如果密钥为3且原始字母为“b”,则加密字母为“e”。如果密钥为3且原始字母为“z”,则加密字母为“c”

这是我的密码:

import java.util.Scanner;
public class  Cipher {
    public static void main(String []main){
        Scanner console = new Scanner(System.in);
        System.out.print("Enter your first name: ");
        String firstname = console.nextLine();
        System.out.print("Enter your middle name: ");
        String middlename = console.nextLine();
        System.out.print("Enter your last name: ");
        String lastname = console.nextLine();
        System.out.print("enter the key ");
        int N = console.nextInt();
        String s = firstname + middlename + lastname;
        System.out.print("your original name is "+ s);
        String empty = "";
        for( int i = 0; i<=s.length();i++){
            if (s.charAt(i)!=' '){
                System.out.print(empty ="" + s.charAt(i));
            }
            else{
                System.out.print(empty +=s.charAt(i+N));
            }

              }
            System.out.print("encrypted name is " + empty);
    }
}
例如,我应该得到以下信息:

Enter your first name: a
Enter your middle name: b
Enter your last name: c
enter the key 2
your original name is abc
encrypted name is cde
您不能使用此选项:

s.charAt(i+N)

由于它将访问字符串“后面”的字符-您可以使用从
0
s.length()的索引

考虑使用此代码而不是循环的上一个

    byte[] input = s.getBytes();
    for (int i = 0; i < input.length; ++i) {
        input[i]+= N;
    }

    String encrypted = new String(input);
    System.out.print("encrypted name is " + encrypted);
byte[]输入=s.getBytes();
对于(int i=0;i

对于ASCII符号集应该没问题。

请考虑改进您的问题,告诉我们您期望的行为和实际看到的情况,以及您尝试调试程序所采取的步骤。@HovercraftFullOfEels编辑了主要问题,并放置了预期输出和我得到的信息,您的错误消息是密钥。它告诉您查看程序的第19行,您试图获取字符串中超出字符串长度的字符。请注意,字符串和数组是基于0的,因此长度为3的字符串将在位置0、1和2处包含字符。您正在尝试查看位置3,因为for循环转到
谢谢:)@HovercraftFullOfEels如何使用unicode在程序中创建新字符,以便能够根据需要加密字符串?unicode?您只需使用字符串中的字符并将其移位即可。您需要一个底部字符和一个顶部字符,它们包含您感兴趣的所有字符,然后做一些简单的数学运算来旋转或取消旋转它们。实验,玩,玩得开心。
    byte[] input = s.getBytes();
    for (int i = 0; i < input.length; ++i) {
        input[i]+= N;
    }

    String encrypted = new String(input);
    System.out.print("encrypted name is " + encrypted);