Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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中创建一个简单的移位密码_Java_Encryption_Nullpointerexception - Fatal编程技术网

尝试在java中创建一个简单的移位密码

尝试在java中创建一个简单的移位密码,java,encryption,nullpointerexception,Java,Encryption,Nullpointerexception,我一直在尝试创建一个基本的奇数/偶数移位密码,到目前为止,在我运行之前,我的代码中没有可见的错误,但是在我尝试运行它之后,我被告知有一个空指针异常 Exception in thread "main" java.lang.NullPointerException at Encryption.cypher(Encryption.java:18) at EncryptionDemo.main(EncryptionDemo.java:10) 可能是因为我没有初始化某个变量,但我相信我已经初始化了。这

我一直在尝试创建一个基本的奇数/偶数移位密码,到目前为止,在我运行之前,我的代码中没有可见的错误,但是在我尝试运行它之后,我被告知有一个空指针异常

Exception in thread "main" java.lang.NullPointerException
at Encryption.cypher(Encryption.java:18)
at EncryptionDemo.main(EncryptionDemo.java:10)
可能是因为我没有初始化某个变量,但我相信我已经初始化了。这是我的代码,谢谢你的建议

import java.util.Scanner;

public class Encryption {
protected int shift = 3;
protected int shift2 = 5;
protected char c = 'a';
protected String ms;
protected int len;

protected void InputMessage() {
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter your plaintext.");
    String ms = kb.nextLine();
}

protected String cypher() {

    **int len = ms.length();**
    for (len = 0; len < ms.length(); len++) {

        c = (char) (ms.charAt(len));
        if ((boolean) (ms.charAt(len) % 2 == 0)) {
            c = (char) (ms.charAt(len + shift));
        } else {
            c = (char) (ms.charAt(len + shift2));
        }
        c = (char) ms.charAt(len);
    }
    return ms;
  }

protected String decypher() {
    int len = ms.length();
    for (len = 0; len < ms.length(); len++) {

        c = (char) (ms.charAt(len));
        if ((boolean) (ms.charAt(len) % 2 == 0)) {
            c = (char) (ms.charAt(len - shift));
        } else {
            c = (char) (ms.charAt(len - shift2));
        }
        c = (char) ms.charAt(len);
    }
    return ms;
}

protected void output() {
    System.out.println("" + (ms));

}
}


import java.util.Scanner;

public class EncryptionDemo {
public static void main(String[] args) {
    char[] array = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz_"
            .toCharArray();

    Encryption message = new Encryption();
    message.InputMessage();
    **message.cypher();**
    message.output();

}
}
import java.util.Scanner;
公共类加密{
受保护的整数移位=3;
受保护的整数移位2=5;
受保护字符c='a';
受保护字符串ms;
受保护的内部透镜;
受保护的void InputMessage(){
扫描仪kb=新扫描仪(System.in);
System.out.println(“输入您的明文”);
字符串ms=kb.nextLine();
}
受保护字符串cypher(){
**int len=毫秒长度()**
对于(len=0;len
InputMessage
中,您声明了一个名为
ms
的局部变量,但不使用它:

String ms = kb.nextLine();
我假定您打算将
kb.nextLine()
赋值给成员变量
ms
。如果是,你应该写:

ms = kb.nextLine();

您同样没有使用
len
成员变量;但是,您正在使用成员变量
c
,但在for循环的开始和结束处将其重置为固定值:您不妨将其声明为局部变量。

我看到您正在使用

String ms = kb.nextLine();
它没有设置类属性。而是在方法范围中创建一个新变量,而不是使用类1。如果删除了那里的类型声明,那么应该可以正常工作

如果还想在其中定义类型(这不是必需的),则需要通过显式方式访问类级别属性:

String this.ms = kb.nextLine();

您是否有意不更改
cypher
decypher
方法中的
ms
?您只更新
c
。提示:如果您提供堆栈跟踪以显示出现问题的行号,则指示这些行是哪一行非常有用,例如
//这是第18行
//此处出现NPE.Ty我现在就开始标记这些行,安迪。是的,没有更改的ms是故意的。我只是制作了一个非常简单的Caesar Cypher,它可以将消息中的字符向前或向后移动w=而不改变消息本身的组成。