вернуть ArrayList из целых чисел, состоящих из n случайных чисел? - PullRequest
0 голосов
/ 08 декабря 2011

Как мне создать метод RandomArray и позволить ему взять целое число n и вернуть ArrayList из Integer, состоящий из n случайных чисел в диапазоне от 0 до 255. (Другими словами: пусть возвращаемый массив имеет размер 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 ]

1 голос
/ 08 декабря 2011

Вы имеете в виду что-то вроде этого:

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;
}
1 голос
/ 08 декабря 2011

ArrayLists работают почти так же, как массивы, за исключением того, что они могут увеличиваться (или уменьшаться) по вашему желанию и не поддерживают доступ / поиск через оператор [] (то есть вы не можете сделать n[i1] для ArrayList ). Вместо этого используйте метод add() для добавления к нему элементов и метод get() для доступа к элементам.

0 голосов
/ 23 мая 2013

Это больше, чем вы просили, но это косвенно связано и может помочь людям найти этот вопрос.

Когда вы хотите получить 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);
}

Использование этого шаблона для генерации случайных данных часто делает ваш код чище, проще и проще для чтения. Попробуйте:)

0 голосов
/ 08 декабря 2011

Основной метод содержит пример использования

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));
    }
}
0 голосов
/ 08 декабря 2011

Попробуйте что-то вроде этого

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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...