首先,我是java语言的初学者,我想测试一个问题,即加密用户提供的消息, 该类如图所示,不幸的是,当我尝试在Main类中使用它时,它给了我一个异常“在线程中”主“java.lang.NullPointerException”,
public class engToEnc {
public String Message;
public char []c = new char [Message.length()];
public String readMessage(String pMessage)
{
this.Message = pMessage;
for(int i = 0 ; i < Message.length() ; i++)
{
c[i] = Message.charAt(i);
c[i] += (char)27;
}
Message = String.copyValueOf(c);
return Message;
}
}
我试图简化功能,以查看异常的原因,如
public String readMessage(String pMessage)
{
this.Message = pMessage;
return Message;
}
但它也给了我相同的异常所以我知道我有一个传递字符串参数的问题, 请帮忙!
答案 0 :(得分:2)
问题在于你的char数组的启动。创建新的engToEnc对象时,Java会为该特定对象创建变量Message。并根据您的代码为null(它还没有启动)。然后Java尝试创建char数组并创建一个大小为“Message”的新charry。但Message变量为null,并且它没有名为length()的属性。所以它给你NullPointer异常。 请尝试下面的代码。在那里,我在启动Message变量后在readMessage方法中初始化char数组。
public class engToEnc {
public String Message;
public char[] c;
public String readMessage(String pMessage) {
this.Message = pMessage;
c = new char[Message.length()];
for (int i = 0; i < Message.length(); i++) {
c[i] = Message.charAt(i);
c[i] += (char) 27;
}
Message = String.copyValueOf(c);
return Message;
}
}
请遵循命名惯例。你的代码看起来很混乱。
答案 1 :(得分:1)
public class engToEnc {
public String message; // message not declared => messsage == null.
//your are calling length() on message which are null.
public char []c = new char [message.length()];
//instead do this:
public String message;
public char[] c;
public String readMessage(String pMessage)
{
//this.Message = pMessage;
this.message = pMessage; // now message is declared, and we can call length().
this.c = new char [message.length()];
for(int i = 0 ; i < message.length() ; i++)
{
c[i] = message.charAt(i);
c[i] += (char)27;
}
message = String.copyValueOf(c);
return message;
}
}
答案 2 :(得分:0)
问题在于:
public String Message; // Message == null
public char []c = new char [Message.length()]; // NullPointerException
试试这个:
public String Message;
public char []c;
然后:
public String readMessage(String pMessage) {
this.Message = pMessage;
c = new char [Message.length()];
//...
答案 3 :(得分:0)
您尚未为Message
数据成员
做类似的事情: -
Message = new String();
在构造函数中,然后在readMessage
内为c[]
分配内存。
答案 4 :(得分:0)
请尝试以下代码:
public class engToEnc {
public String Message;
public char []c ;
public String readMessage(String pMessage)
{
this.Message = pMessage;
this.c = new char [Message.length()]
for(int i = 0 ; i < Message.length() ; i++)
{
c[i] = Message.charAt(i);
c[i] += (char)27;
}
Message = String.copyValueOf(c);
return Message;
}
}