2015-09-27 104 views
0

我一直在尝试创建一个基本的奇数/偶数转换密码,到目前为止,在我运行它之前,我没有看到可见的错误,但是在我尝试运行它之后, m告诉我们有一个空指针异常。试图在java中创建一个简单的转换密码

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

} 
} 
+4

的可能重复[什么是空指针异常,和我如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) –

+0

你有意不是在你的'cypher'和'decypher'方法中更改'ms'?你只更新'c'。 –

+0

提示:如果您给出一个堆栈轨迹以显示出现问题的行号,那么指出这些行是哪一行是非常有用的,例如, '//这是第18行或'// NPE发生在这里! –

回答

0

InputMessage,声明称为ms一个局部变量和不使用它:

String ms = kb.nextLine(); 

我假定你的意思是分配给kb.nextLine()成员变量ms。如果是这样,你应该写:

ms = kb.nextLine(); 

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

0

我看到你设置毫秒值与

String ms = kb.nextLine(); 

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

如果你想有定义的类型,以及(这是没有必要的),那么你需要是明确的访问类级属性:

String this.ms = kb.nextLine(); 
相关问题