2014-10-05 63 views
1

我是一個初學java程序員,我做了一些研究,但我不明白如何將它應用到我的程序。爲什麼我在我的輸入中得到NullPointerException?

當我運行我的程序時,我得到一個NullPointerException,因爲我輸入第一個IP地址的暱稱。爲什麼?

代碼中的隔離行是我得到異常的地方。

+2

我不能說出你「孤立」了什麼。任何時候你有一個錯誤,就像一個Java異常,發佈整個事情。它有很多你沒有給我們的信息。順便說一下,「&」的所有用法可能都是「&&」。在java中都是合法的運算符,但意味着不同的東西。 – arcy 2014-10-05 23:08:46

+0

對不起@arcy,我試圖讓線條儘可能地顯眼。此外,這是整個代碼。並且代碼被評論來解釋我的每一個行動。並感謝你。我會根據合法的操作員提示進行更改。 – ShacoNotFound404 2014-10-05 23:12:21

回答

2

當您分配一個數組是這樣的:

IPAddress[] ipAddress = new IPAddress[2]; 

它創建了兩個插槽的數組,但兩者的插槽有null。你需要把東西在每個時隙之前,你可以使用它作爲一個對象:

ipAddress[i] = new IPAddress(); 
ipAddress[i].nickname = input.next(); 

local_address你去找其他的NPE。您最初將result設置爲null,並且不要爲其指定數組。這就是你獲得NPE的原因。你可以解決這個問題:

String[][] result = new String[addr.length][]; // instead of null 

但是,你也將需要分配String[]j每個值。如果您不知道count會變成什麼樣子,您可以考慮使用可自動增長的List<String>

順便說一句:我不知道你要完成什麼,但是你的邏輯看起來不正確。你真的需要一個二維String數組嗎?看起來這應該是你想要什麼:

static List<String> local_address(IPAddress addr[]) { 
    List<String> result = new LinkedList<>(); 
    for (int j = 0; j < addr.length; j++) { 
     IPAddress test = addr[j]; 
     if (test.xx == addr[j + 1].xx & test.yy == addr[j + 1].yy) { 
      result.add(addr[j + 1].nickname; 
     } 
    } 
    return result; 
} 
5

你缺少這一行(拋出NullPointerException異常前):

ipAddress[i] = new IPAddress(); 

你應該之前初始化數組的元素。

+1

@ ShacoNotFound404在運行構建Ipaddress對象的構造函數之前,您不能分配您的值。新的IPAddress [2]沒有成爲對象,它只是佔用空間。所以你必須在他們改變他們的狀態,價值觀之前製造他們。 – daredesm 2014-10-05 23:13:46

3

您已創建IP地址的array,但您從未填入任何IP地址。

這裏ipAddress[i].nickname = input.next();你認爲ipAddress[i]持有IPAdress對象,並嘗試其nickname字段設置爲input.next()。但由於您尚未向其中添加任何對象,因此數組中填充的默認值爲null

相關問題