我正在编写一个处理子网的程序。
在simpleIPaddress.class第315行,对象Ted的fullSubnetAddress =“111.111.111.111”。
在simpleIPaddress.class第317行中,对象Ted的fullSubnetAddress由于某种原因而无法改变。它将类的字段变量更改为as textAddress。当最初根据用户输入创建simpleIPaddress地址时,将从代码中较早的程序生成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如果需要的话。
答案 0 :(得分:0)
您只创建一个SubnetItem
对象,然后在for
循环内重复修改该单个对象,同时指定数组的每个元素指向该对象。当循环结束时,你有一个充满指向同一个对象的数组,现在分配了最后一个值。
如果希望每个数组元素具有不同的值,则需要为每个数组元素创建一个单独的对象。这就像将SubnetItem ted = new SubnetItem(...);
行向下移动几行一样简单,使其位于for
循环内。