2015-09-05 25 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