动态更新数组

时间:2014-03-18 06:34:20

标签: java arrays

我是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数组中包含零元素

1 个答案:

答案 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