我是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
数组中包含零元素
答案 0 :(得分:0)
我有两个建议给你,它取决于你喜欢的。
首先,我建议将数组转换为列表,然后从列表中删除必要的元素,然后转换回数组。代码如下:
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;
这将要求你在第一个for循环之前有一个int nrE,其值为数组的长度(此处为10)。
这两个都应该在迭代结束时在for循环中实现。 从我所见,我的第一个建议最常用。
注意:我可能会误解你想要实现的目标,但我相信你获得3个随机元素的代码是错误的。如果f1 = 3并且您在位置Math.random()* f1处获取元素,则总是会得到0到3范围内的元素。要修复此问题,您可以改为使用Math.random()* s1.length