Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中带密钥的Caesar密码_Java - Fatal编程技术网

java中带密钥的Caesar密码

java中带密钥的Caesar密码,java,Java,我正在用java编写这个ceasar密码加密程序。在这里,您要求用户输入一个文本和密钥来加密文本。 如果他们不输入一个数字,它将输入一个随机数。现在还没有尝试解密文本。 在第29行也出现了一个错误,cmd一直在说二进制运算符的操作数类型不正确 import java.util.Scanner; import java.util.Random; public class A { public s

我正在用java编写这个ceasar密码加密程序。在这里,您要求用户输入一个文本和密钥来加密文本。 如果他们不输入一个数字,它将输入一个随机数。现在还没有尝试解密文本。 在第29行也出现了一个错误,cmd一直在说二进制运算符的操作数类型不正确

            import java.util.Scanner;
            import java.util.Random;
            public class A {
                public static void main(String[] args) {
                    System.out.println("This program encrypts text you enter using the Caesar Cipher.\n");
                    Scanner sc = new Scanner(System.in);
                    String text;
                    String line;
                    String choice;
                    String shift;
                    char[] alphabet = {'A', 'B','C','D','E', 'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
                    int key;
                    int caeserVal;
                    int sum;
                    String doAgain;

                    do {
                        System.out.println("Enter a line text to encrypt: ");
                        line = sc.nextLine();
                        System.out.print("Enter the key between -25 and 25. Enter 0 to have it generate a random key: ");
                        key = sc.nextInt();
                        sum = 0;
                        char[] plaintext = args[0].toCharArray();
                        shift = args[1];

                        for(int i = 0; i < plaintext.length; i++) {
                            for(int j = 0; j < alphabet.length; j++) {
                                if(alphabet[j] == plaintext[i]) {
                                    plaintext[i] = alphabet[(j + shift) % alphabet.length];
                            }
                        }
                    }
                            String ciphertext = new String(plaintext);
                            System.out.println(ciphertext);
                            caeserVal = sum + key;
                        System.out.printf("The text encrypted with key %d is %s.\n", key,caeserVal);
                        System.out.print("Try again(y or n)? ");
                        choice = sc.nextLine().toUpperCase();
                    }while(choice.equals("Y"));
                    System.out.println("Thank you for using this program.");



                }
            }
import java.util.Scanner;
导入java.util.Random;
公共A类{
公共静态void main(字符串[]args){
System.out.println(“此程序加密您使用Caesar密码输入的文本。\n”);
扫描仪sc=新的扫描仪(System.in);
字符串文本;
弦线;
字符串选择;
弦位移;
字符[]字母表={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int键;
int caeserVal;
整数和;
串波达方向增益;
做{
System.out.println(“输入要加密的行文本:”);
line=sc.nextLine();
System.out.print(“输入介于-25和25之间的键。输入0使其生成一个随机键:”;
key=sc.nextInt();
总和=0;
char[]明文=args[0].toCharArray();
shift=args[1];
for(int i=0;i
如果第二个命令行参数是整数

 import java.util.Scanner;
            import java.util.Random;
            public class A {
                public static void main(String[] args) {
                    System.out.println("This program encrypts text you enter using the Caesar Cipher.\n");
                    Scanner sc = new Scanner(System.in);
                    String text;
                    String line;
                    String choice;
                    String shift;
                    char[] alphabet = {'A', 'B','C','D','E', 'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
                    int key;
                    int caeserVal;
                    int sum;
                    String doAgain;

                    do {
                        System.out.println("Enter a line text to encrypt: ");
                        line = sc.nextLine();
                        System.out.print("Enter the key between -25 and 25. Enter 0 to have it generate a random key: ");
                        key = sc.nextInt();
                        sum = 0;
                        char[] plaintext = args[0].toCharArray();
                        shift = args[1];

                        for(int i = 0; i < plaintext.length; i++) {
                            for(int j = 0; j < alphabet.length; j++) {
                                if(alphabet[j] == plaintext[i]) {
                                    plaintext[i] = alphabet[((j + Integer.parseInt(shift)) % alphabet.length)];
                            }
                        }
                    }
                            String ciphertext = new String(plaintext);
                            System.out.println(ciphertext);
                            caeserVal = sum + key;
                        System.out.printf("The text encrypted with key %d is %s.\n", key,caeserVal);
                        System.out.print("Try again(y or n)? ");
                        choice = sc.nextLine().toUpperCase();
                    }while(choice.equals("Y"));
                    System.out.println("Thank you for using this program.");



                }
            }
import java.util.Scanner;
导入java.util.Random;
公共A类{
公共静态void main(字符串[]args){
System.out.println(“此程序加密您使用Caesar密码输入的文本。\n”);
扫描仪sc=新的扫描仪(System.in);
字符串文本;
弦线;
字符串选择;
弦位移;
字符[]字母表={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int键;
int caeserVal;
整数和;
串波达方向增益;
做{
System.out.println(“输入要加密的行文本:”);
line=sc.nextLine();
System.out.print(“输入介于-25和25之间的键。输入0使其生成一个随机键:”;
key=sc.nextInt();
总和=0;
char[]明文=args[0].toCharArray();
shift=args[1];
for(int i=0;i

如果它不是整数,那么它将抛出一个错误。

哪一行是第29行?纯文本[i]=字母表[(j+shift)%alphabet.length]
shift
是一个字符串,因此不能在代数表达式中使用它,因此错误消息非常有意义。首先解决这个问题。数组索引应该是整数。如果是数字,则强制转换为什么不使用字符串变量“line”作为纯文本而不是args[0]?如果用户输入0,您在哪里生成随机数?当我在cmd中输入一个键时,这个错误会在线程“main”java.lang.ArrayIndexOutOfBoundsException:0在a.main(a.java:23)中弹出“Exception in thread”java.lang.ArrayIndexOutOfBoundsException:0,这是因为您需要传递2个命令行参数,因为您正在提供shift作为参数[1],这意味着它是第二个参数,您的意思是什么,我在尝试这样做时遇到了困难。在main中,请参阅参数字符串args[],这将通过命令行获取输入,因此如果您提供一个输入,那么它将被视为args[0],依此类推。因此,在您的代码中,您将其作为args[1]提供,因此命令行中的第二个参数是您要查找的值。如果您仍然觉得很难,请将以下语句更改为:shift=args[1];改为shift=“1”(您选择的任何数字)或使用Scan获取输入