添加和删​​除数组中的元素:练习

时间:2013-07-02 04:50:44

标签: java arrays

我希望用数字1到10填充数组a并从该数组中取一个随机数并将其添加到数组b并从数组a中删除该元素。我想知道最有效的方法。编辑:(练习要求我在数组中没有重复的值,并且每次调用方法时排列都是随机的。)到目前为止,这是我的方法:

public int[] nextPermutation() {
    int capOne = 10;
    int capTwo = 10;
    int aSize = 0;
    int bSize = 0;


    int[] a = new int[capOne];
    int[] b = new int[capTwo];

    int upperBound = 11;
    Random generator = new Random();

    //fill initial array with 1 - 10
    for (int i = aSize; i < 10; i++) {
        a[i] = i + 1;
        //companion variable for sizing array
        aSize++;
    }

    //Create a random integer and add it to array b
    //Remove same integer from array a
    //Repeat and remove another random integer from the remaining integers in array a and    add it to b


        permuted = b;
        return permuted;
        }

我可能会以低效的方式接近这个,如果不是完全错误的话。如果是这样,我相信你会毫不犹豫地告诉我。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可以:

//randomly choose element
int index = (int) (Math.random() * aSize);
int dataFromA = a[index];

//"remove" it from A
aSize--;
for(int i = index; i<aSize; i++) {
    a[i] = a[i+1];
}

//"add" it to b
b[bSize] = dataFromA;
bSize++;

只有有趣的部分是从A中移除,你必须在周期之前缩小尺寸(或者你可以i < aSize-1,然后减小尺寸)

我猜你必须使用数组,因为这是一个例外,但使用List会更好。

答案 1 :(得分:0)

这是一个使用swap生成随机排列的程序。好吧,我不确定哪个可以产生更好的结果,但是交换应该比添加/删除数组更快:

public int[] nextPermutation() {
    int cap = 10;
    int[] a = new int[cap];
    Random generator = new Random();

    //fill initial array with 1 - 10
    for (int i = 0; i < cap; i++) {
        a[i] = i + 1;
    }

    for (int i = 0; i < cap; i++) {
        int j = generator.nextInt(cap);
        int x = a[j];
        a[j] = a[i];
        a[i] = x;
    }

    // You can reduce the size of the output array:
    // int output[] = new int[5];
    // System.arraycopy(a, 0, output, 0, 5);
    // return output;

    return a;
}