试图在java中创建一个简单的shift cypher

时间:2015-09-27 22:17:48

标签: java encryption nullpointerexception

我一直试图创建一个基本的奇数/偶数移位密码,到目前为止我在运行之前没有可见的错误但是在我尝试运行之后我告诉那里&# 39; sa nullpointer异常。

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();

}
}

2 个答案:

答案 0 :(得分:0)

InputMessage中,您声明了一个名为ms的本地变量,并且不使用它:

String ms = kb.nextLine();

我认为您打算将kb.nextLine()分配给成员变量ms。如果是这样,你应该写:

ms = kb.nextLine();

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

答案 1 :(得分:0)

我看到您使用

设置了ms的值
String ms = kb.nextLine();

不设置类属性。而是在方法范围中创建一个新变量,而不是使用第一类。如果你删除那里的类型声明那么它应该可以正常工作。

如果你想在那里定义类型(这是不必要的),那么你需要通过显式访问类级属性:

String this.ms = kb.nextLine();