2014-09-20 40 views
0

首先我是一個java語言的初學者,我想測試自己的問題是加密用戶給出的消息, 類是如圖所示,不幸的是,當我嘗試使用主類的類它給了我「線程‘main’顯示java.lang.NullPointerException」的例外,在java中的字符串作爲參數

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

但它也給了我同樣的例外,所以我知道我有一個問題,傳遞字符串參數, 請幫助!

+1

消息沒有賦值,它只是一個空指針。 Message.length()將導致NullPointerException。嘗試消息=「某個值」。順便說一句,命名約定稱爲小寫起始名稱:this.message而不是this.Message。後者會讓每個人都讀到你的代碼。 – 2014-09-20 13:44:04

回答

2

問題是與你的字符數組的初始化。當您創建新的engToEnc對象時,Java會爲該特定對象創建變量Message。並根據你的代碼是null(它尚未啓動)。然後Java嘗試創建char數組並創建一個大小爲「Message」的新字符。但是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; 
    } 

} 

請按照命名約定。你的代碼看起來很混亂。

0

這裏的問題是:

public String Message; // Message == null 
public char []c = new char [Message.length()]; // NullPointerException 

試試這個:

public String Message; 
public char []c; 

則:爲Message數據成員

public String readMessage(String pMessage) { 
    this.Message = pMessage; 
    c = new char [Message.length()]; 
    //... 
0

您還沒有分配的內存

做些什麼如: -

Message = new String(); 

在您的構造函數,然後裏面readMessagec[]分配內存。

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