2015-09-05 41 views
-2

我正在編寫一個處理子網的程序。對象字段的變化原因不明

在simpleIPaddress.class行315中,對象Ted的fullSubnetAddress =「111.111.111.111」。

在simpleIPaddress.class行317中,對象Ted的fullSubnetAddress由於某種原因而改變,我找不出來。它更改爲textAddress該類的字段變量。當簡單IP地址最初是從用戶輸入創建時,textAddress從代碼中較早的程序中生成。

第一次執行for循環之後,Ted會永久更改爲for循環的其餘部分。

在代碼中,我正在緩慢地填充數組。

SubnetItem ted = new SubnetItem(subnetNumber, fullSubnetAddress, fullStartHost, 
    fullEndHost, fullBroadcastAddress); 
this.subnetArray = new SubnetItem[totalSubnets]; 

for (int i = 0; i < subnetArray.length; i++) 
{ 

    this.subnetArray[i] = ted; // line 315 
    this.subnetArray[i].setSubnetNumber(i); 
    System.out.println(ted.toString()); // line 317 
    calculateStartingAddress(i); 

    System.out.println(ted.toString()); 

    System.out.println(subnetArray[i].toString()); 

} 

Here is the full code如果需要的話。

+5

如果代碼太大,您應該改爲編寫[mcve]。請看[問]。 – RealSkeptic

回答

0

您只創建一個SubnetItem對象,然後在for循環內重複修改該單個對象,同時指定數組的每個元素指向該對象。循環結束時,您將有一個指向同一對象的指針,該指針現在具有最後一個值。

如果您希望每個數組元素具有不同的值,則需要爲每個元素創建一個單獨的對象。這與將SubnetItem ted = new SubnetItem(...);行向下移動幾行以使其位於for循環內一樣簡單。

+0

謝謝!我弄明白了。我有點朦朧問題是什麼。這是我絕對要考慮的事情! A + – chrislbaird