Java 不断获取NullPointerException

Java 不断获取NullPointerException,java,Java,我正在制作一个程序,它将文字加密成某种秘密信息,但我不断地出错。是的,我知道代码很难看。。。但我是个初学者。 这是我的主要任务 public class Main { public static void main (String args []){ String message; message = JOptionPane.showInputDialog("Give me something to crypt!"); Crypt secret = new Crypt

我正在制作一个程序,它将文字加密成某种秘密信息,但我不断地出错。是的,我知道代码很难看。。。但我是个初学者。 这是我的主要任务

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


}
公共类密码{
字符串字母[];
字符串消息;
公共密码(){
message=“”;
字母[0]=“A”;
字母[1]=“B”;
字母[2]=“C”;
字母[3]=“D”;
字母[4]=“E”;
字母[5]=“F”;
字母[6]=“G”;
字母[7]=“H”;
信[8]=“我”;
字母[9]=“J”;
字母[10]=“K”;
字母[11]=“L”;
字母[12]=“M”;
字母[13]=“N”;
字母[14]=“O”;
字母[15]=“P”;
字母[16]=“Q”;
字母[17]=“R”;
字母[18]=“S”;
字母[19]=“T”;
字母[20]=“U”;
字母[21]=“V”;
字母[22]=“W”;
字母[23]=“X”;
字母[24]=“Y”;
字母[25]=“Z”;
字母[26]=”;
}
int getRandomCrypt(){
//随机数1到25
int x;
x=(int)(1+Math.random()*25);
返回x;
}
int checkLetter(字符串子消息){
//核对信件
布尔b=假;
int i=0;
while(b=false){
如果(i==27){
i=0;
if(子消息==字母[i])
返回i;
其他的
i++;
}
}
返回0;
}
无效消息(字符串消息){
字符串CyptedMessage=null;
字符串消息1;
对于(int i=0;i26){
信息1=信函[i-27];
}
CyptedMessage+=message1;
} 
系统输出打印(CyptedMessage);
}
}
当我运行这个时,我得到

 Exception in thread "main" java.lang.NullPointerException
at Crypt.<init>(Crypt.java:9)
at Main.main(Main.java:9)
线程“main”java.lang.NullPointerException中的异常 在Crypt.(Crypt.java:9) Main.Main(Main.java:9)
您没有初始化
字符串字母[]并直接向其中添加值
在构造函数中执行此操作
letter=新字符串[大小]

或者在开始
字符串字母[]=新字符串[size]时执行此操作


在您的情况下,
size
27

您需要初始化数组,而不仅仅是定义它

String letter[] = new String[27];
您还可以在使用阵列数据之前进行NPE检查

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

正如Serge指出的,字符串字母[]是数组声明,而不是初始化。然后需要对其进行初始化以定义精确的大小

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

你的

字符串字母[]未实例化


添加
字母=新字符串[大小]代码。

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

在使用之前先初始化它

公共密码(){


}

字符串字母[]=新字符串[27];
**letter= new String[27];**
letter[0]="A";
letter[1]="B";
... ...