2013-10-27 44 views
-1

我正在制作一个程序,它将单词加密成某种秘密消息,但是我一直在收到错误。是的,我知道代码很丑陋,但我是初学者。 这是我的主要。不断得到NullPointerException

public class Main { 

public static void main (String args []){ 

    String message; 
    message = JOptionPane.showInputDialog("Give me something to crypt!"); 
    Crypt secret = new Crypt(); 
    secret.CyptedMessage(message); 
} 

} 

这是我的课。

public class Crypt { 

String letter[]; 
String message; 

public Crypt(){ 
    message = ""; 
    letter[0]="A"; 
    letter[1]="B"; 
    letter[2]="C"; 
    letter[3]="D"; 
    letter[4]="E"; 
    letter[5]="F"; 
    letter[6]="G"; 
    letter[7]="H"; 
    letter[8]="I"; 
    letter[9]="J"; 
    letter[10]="K"; 
    letter[11]="L"; 
    letter[12]="M"; 
    letter[13]="N"; 
    letter[14]="O"; 
    letter[15]="P"; 
    letter[16]="Q"; 
    letter[17]="R"; 
    letter[18]="S"; 
    letter[19]="T"; 
    letter[20]="U"; 
    letter[21]="V"; 
    letter[22]="W"; 
    letter[23]="X"; 
    letter[24]="Y"; 
    letter[25]="Z"; 
    letter[26]=" "; 
} 

int getRandomCrypt(){ 
    //Random number 1 to 25 
    int x; 
    x=(int)(1 + Math.random()*25); 
    return x; 
} 

int checkLetter(String subMessage){ 
    //Checks letters 
    boolean b = false; 
    int i=0; 
    while (b = false){ 

     if (i == 27){ 
      i=0; 

     if (subMessage == letter[i]) 
      return i; 


     else 
      i++; 

     } 
    } 
    return 0; 
} 

void CyptedMessage(String message){ 

    String CyptedMessage = null; 
    String message1; 
    for (int i = 0; i < message.length(); i++){ 
     int number = checkLetter(message.substring(i, i+1)); 
     message1 = letter[number + getRandomCrypt()]; 
     if (number + getRandomCrypt()>26){ 
      message1 = letter[i-27]; 
     } 
     CyptedMessage += message1; 
    } 

    System.out.print(CyptedMessage); 
} 


} 

当我运行此我得到...

Exception in thread "main" java.lang.NullPointerException 
at Crypt.<init>(Crypt.java:9) 
at Main.main(Main.java:9) 
+2

字符串信[] =新的String [27]; –

回答

0

正如塞尔指出,字符串函[]是一个数组声明,而不是一个初始化之前把NPE检查。你需要初始化它来定义一个确切的大小。

public Crypt(){ 
    letter = new String[27]; //define array 
    message = ""; 
    letter[0]="A"; 
    letter[1]="B"; 
    letter[2]="C"; 
    letter[3]="D"; 
    letter[4]="E"; 
    letter[5]="F"; 
    letter[6]="G"; 
    letter[7]="H"; 
    letter[8]="I"; 
    letter[9]="J"; 
    letter[10]="K"; 
    letter[11]="L"; 
    letter[12]="M"; 
    letter[13]="N"; 
    letter[14]="O"; 
    letter[15]="P"; 
    letter[16]="Q"; 
    letter[17]="R"; 
    letter[18]="S"; 
    letter[19]="T"; 
    letter[20]="U"; 
    letter[21]="V"; 
    letter[22]="W"; 
    letter[23]="X"; 
    letter[24]="Y"; 
    letter[25]="Z"; 
    letter[26]=" "; 
} 

编辑:忘了; 和其他人打我:P

0

您还没有初始化你String letter[];和直接添加值到它
为此在构造函数
letter = new String[size];
或做这在起动String letter[] = new String[size];

一个d在你的情况下size27

0

你需要初始化你的数组ans并不只是定义它。

String letter[] = new String[27]; 

您也可以使用数组数据

if(letter[number + getRandomCrypt()] != null) 
    message1 = letter[number + getRandomCrypt()]; 
0

您的String letter[];没有实例化。

add在初始化之前你的构造函数加密。

0

在Crypt类中,您声明了一个名为letters的字符串数组,但在使用它时不会初始化它。这就是您遇到NullPointerException的原因。

在使用它之前启动它。

公共隐窝(){

**letter= new String[27];** 
letter[0]="A"; 
letter[1]="B"; 
... ... 

}

相关问题