我是java编码的初学者,我面临着更新数组的一些复杂性。
我的问题是我有一个名为s1[]的数组,它由10个元素组成,我必须选择前3个元素,我必须存储在一个数组中,即max1[]数组,在下一个数组中,我必须从相同的数组中随机选择3个元素,即s1[],并将其存储在max6[]中,我需要在两个数组,即max1[]和max6[]之间进行比较,以便存储匹配值。
我的代码看起来像这样(这里是f1 = 3)
for (i1 = 0; i1 < f1; i1++) {
max1[i1] = s1[i1];
System.out.println("1st tree random leaf nodes of phy m/c 1 at tree 1 : " + max1[i1]);
System.out.println(" \n ");
max6[i1] = s1[(int) (Math.random() * f1)];
System.out.println(" random leaf nodes of phy m/c 1 at tree 2: " + max6[i1]);
System.out.println(" \n ");
}
for (int l1 = 0; l1 < f1; l1++) {
for (int k1 = 0; k1 < f1; k1++) {
if (max1[l1] == max6[k1]) {
c1[l1] = max1[l1];
k1++;
System.out.println("the value after crossover is:--------->" + c1[l1]);
break;
}
}
}现在我想要的是,我必须重复循环一些迭代,这样在下一次迭代中,第一次迭代中max1数组的值不应该重复,这意味着我必须从s1数组中永久删除元素,直到s1数组中包含零个元素为止
发布于 2014-03-18 15:01:26
我有两个建议给你,这取决于你喜欢哪一个。
首先,我建议将数组转换为列表,并从列表中删除必要的元素,然后再转换回数组。代码如下:
List<Double> list = new ArrayList<Double>(Arrays.asList(s1));
list.remove(i1);
s1 = list.toArray(new Double[0]);其次,您可以将数组的特定元素移到后面,只迭代比长度小的一个位置。这需要您添加一个额外的int变量来记录数组中元素的数量或记录删除元素的数量,前者是更好的主意。代码如下:
double temp;
for(int i = 0; i < test.length - 1; i++){
temp = s1[i];
s1[i] = s1[i + 1];
s1[i + 1] = temp;
}
nrE = nrE - 1;这将要求您在第一个nrE循环之前有一个带有数组长度值(这里是10)的int。
这两种方法都应该在迭代结束时在for循环中实现。从我所看到的情况来看,我的第一个建议被使用最多。
注意:我可能误解了你想要实现的目标,但我相信你获取3个随机元素的代码是错误的。如果为f1=3,并且您在Math.random() * f1位置获取元素,则将始终获得0到3范围内的元素。
https://stackoverflow.com/questions/22471963
复制相似问题