我正在制作一个程序,在其中将单词加密成某种秘密消息,但我一直在收到错误。是的,我知道代码很丑......但我是初学者。 这是我的主要内容。
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)
答案 0 :(得分: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
答案 1 :(得分:0)
您没有初始化String letter[];
并直接在其中添加值
在你的构造函数中执行此操作
letter = new String[size];
或者在开始String letter[] = new String[size];
,在您的情况下,size
为27
答案 2 :(得分:0)
您需要初始化一个数组,而不仅仅是定义它。
String letter[] = new String[27];
您也可以在使用阵列数据之前进行NPE检查
if(letter[number + getRandomCrypt()] != null)
message1 = letter[number + getRandomCrypt()];
答案 3 :(得分:0)
您的String letter[];
未实例化。
在初始化之前在Crypt的构造函数中添加letter = new String[size];
。
答案 4 :(得分:0)
在类Crypt中,您声明一个名为letters的字符串数组,但在使用它时不会初始化它。这就是你遇到NullPointerException的原因。
在使用它之前初始化它。
public Crypt(){
**letter= new String[27];**
letter[0]="A";
letter[1]="B";
... ...
}