返回一个由n个随机数组成的整数ArrayList?

时间:2011-12-08 00:06:07

标签: java arrays arraylist

如何创建方法RandomArray并让它接受一个整数n并返回一个整数的ArrayList,它由0到255之间的n个随机数组成。(换句话说:让返回的数组的大小为n)? ?? (我使用的是Java Eclipse) 我创建了RandomArray,但是我不知道如何将它放在ArrayList中,这是我到目前为止所做的:

    import java.util.Random;
    public class Lab6 {

    public static void main(String[] args) {

    Random random = new Random();
    int[] n = new int[1];

    for( int i = 0 ; i < n.length ; i++ ) { 
       for ( int i1 = 0 ; i1 < n.length ; i1++ ) { 
          n[i1] = random.nextInt(255);
       }
    }
    for( int a : n ) { 
        System.out.println( a );
    }
}
    }

5 个答案:

答案 0 :(得分:1)

ArrayLists的工作方式与数组的工作方式大致相同,只是它们可以根据需要增长(或缩小),并且不支持通过[]运算符进行访问/检索(即你不能n[i1]在ArrayList上)。相反,使用其add()方法向其添加元素,使用get()方法访问元素。

答案 1 :(得分:1)

你的意思是这样的:

public ArrayList<Integer> randomArrayList(int n)
{
    ArrayList<Integer> list = new ArrayList<>();
    Random random = new Random();

    for (int i = 0; i < n; i++)
    {
        list.add(random.nextInt(255));
    }
    return list;
}

答案 2 :(得分:0)

尝试这样的事情

private ArrayList<Integer> randomArray(int size){
Random random = new Random();

ArrayList<Integer> newArrayList = new ArrayList<Integer>();

for(int i=0; i<size; i++){
int next = random.nextInt(256);
newArrayList.add(next);
}

return newArrayList;

}

答案 3 :(得分:0)

主要方法包含示例用法

import java.security.*;
import java.util.*;


public class Util {

    public static void main(String[] args) {
        int n = 15;

        ArrayList<Integer> integers = RandomArray(n);

        for (Integer integer : integers) {
            System.out.println(integer);
        }


    }

    private static ArrayList<Integer> RandomArray(int n) {
        Random rand = new SecureRandom();
        byte[] b = new byte[n];
        rand.nextBytes(b);
        Integer[] ints = new Integer[b.length];
        for (int i = 0; i < b.length; i++) {
            ints[i] = b[i] & 0xFF;
        }
        return new ArrayList<Integer>(Arrays.asList(ints));
    }
}

答案 4 :(得分:0)

这比您要求的要多,但它与切线相关,可能会帮助人们遇到这个问题。

当你想要ArrayList随机整数时,你通常只需要一些随机数,而不是真的需要它们存储在任何地方。在这种情况下,您可能只需要一个Iterator<Integer>即可随时返回一个随机整数流。这对于Guava库(现在应该是每个Java代码库的一部分)来说非常容易。

您可以轻松定义Iterator<Integer>,根据您的要求为您提供尽可能多的随机整数(或您想要的任何其他数据类型):

public static final Iterator<Integer> RAND_INT_ITER =
    new AbstractIterator<Integer>() {
        @Override
        protected Integer computeNext() {
            return ThreadLocalRandom.current().nextInt();
        }
    };

或者如果您想使用Random.nextInt(int max)方法:

public static Iterator<Integer> randIntIterator(final int max) {
    return new AbstractIterator<Integer>() {
        @Override
        protected Integer computeNext() {
            return ThreadLocalRandom.current().nextInt(max);
        }
    };
}

在任何需要的地方调用此方法都没有问题,因为它不存储您不浪费时间或空间计算任何东西的状态,垃圾收集器会在您完成时为您清理它。我们使用ThreadLocalRandom来确保这些是线程安全的,并且避免在整个地方构建新的Random对象(以及引入的潜在数据争用条件,尽管Java的新版本非常聪明) 。如果更有意义的话,您可以轻松使用现有的Random对象。

一些例子:

// print random ints until we see one that's divisible by 100
while(true) {
    int rnd = RAND_INT_ITER.next();
    System.out.println(rnd);
    if(rnd % 100 == 0) {
        break;
    }
}

// Get an iterator of exactly 10 random ints, [0,255)
Iterator<Integer> tenRandInts = Iterators.limit(randIntIterator(255), 10);
while(tenRandInts.hasNext()) {
    System.out.println(tenRandInts.next());
}

// Note that the returned iterator above is still one-use, if you need to iterate
// Over the same numbers more than once, put them in a list first
// It's not a good idea to simply convert an Iterator into an Iterable, see:
// http://stackoverflow.com/a/14711323/113632
List<Integer> randIntLs = ImmutableList.copyOf(
                              Iterators.limit(randIntIterator(255), 10));
for(int rnd : randIntLs) {
    System.out.println(rnd);
}
for(int rnd : randIntLs) {
    System.out.println(rnd);
}

使用此模式生成随机数据通常会使您的代码更清晰,更精简,更易于阅读。试一试:)