-1

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

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)
4

5 回答 5

1

正如 Serge 指出的那样,String letter[] 是一个数组声明,而不是初始化。然后您需要对其进行初始化以定义确切的大小。

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

于 2013-10-27T06:49:56.620 回答
0

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

String letter[] = new String[27];

您也可以在使用数组数据之前进行 NPE 检查

if(letter[number + getRandomCrypt()] != null)
   message1 = letter[number + getRandomCrypt()];
于 2013-10-27T06:49:52.563 回答
0

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

在初始化之前添加 letter = new String[size];你的 Crypt 构造函数。

于 2013-10-27T06:54:05.243 回答
0

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

使用前先初始化。

公共地穴(){

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

}

于 2013-10-27T07:03:55.153 回答
0

您没有初始化String letter[];并直接向其中添加值,
请在构造函数中
letter = new String[size];
执行此操作或在启动时执行此操作String letter[] = new String[size];

在你的情况下size27

于 2013-10-27T06:47:47.623 回答