2016-11-03 8 views
1

Я ищу, чтобы создать динамическое количество массивов случайных целых чисел, а затем поместить их в список массивов. Позже я хочу использовать каждый из этих массивов отдельно, чтобы протестировать функцию быстрой сортировки. У меня возникают проблемы с добавлением объекта List [] в ArrayList.Ввод нескольких массивов целых чисел в массивList, а затем печать каждого массива

//Create dynamic amount of random arrays 
public static ArrayList<int[]> Randomizer(int arrays, int size, int seed){ 
    ArrayList<int[]> Tests = new ArrayList<int[]>(arrays); 


    int[] List = new int[size]; 
    for (int j = 0; j < arrays; j++){ 
     Random r = new Random(seed+j); 
     for(int i = 0; i < size; i++){ 
      List[i] = r.nextInt(5*size);//Multiplier for how big the numbers get 
      System.out.print(List[i] + ","); 
     } 
     System.out.println(); 
     Tests.add(j, List); 
    } 


    return Tests; 
} 


public static void main(String[] args) { 
int tests = 5; 
int size = 4; 
ArrayList<int[]> Test = Randomizer(tests,size,10); //1st = Number of Tests 
                //2nd = Number of Digits 
                //3rd = seed for Randomizer 
for(int i = 0; i < Test.size(); i++){ 
System.out.println(Test.get(i)); 
} 
} 

}

+0

Я просто бросил ваш код в Eclipse, и все, кажется, работает нормально - вы запутались в выходе, когда вы 'println (Test.get (i))'? Результатом, который вы получаете, является расположение памяти для массивов. Чтобы увидеть номера из вашего основного метода, вам нужно сделать что-то другое, но результаты, которые вы получаете, - это массивы. –

+0

Я предполагаю, что мой вопрос должен измениться тогда, как я буду использовать один массив из базы данных массивов внутри Test сейчас. Например, печать только одного. Тогда я могу использовать цикл for, чтобы запускать их все. –

+1

Зависит от того, что вы хотите делать с этими массивами. Для печати массива смотрите: [this] (http://stackoverflow.com/questions/409784/whats-the-simplest-way-to-print-a-java-array). Сохранение их в списке позволит вам передать их всем методу или конструктору, тогда просто нужно использовать Test.get (i), чтобы захватить тот, который вы хотите. –

ответ

1

Проблема с кодом, что вы хранения же массив 5 раз в ArrayList, поэтому при печати в процессе генерации он напечатанной правильные номера, но позже вы не могли получить их. Каждая итерация цикла for переписывала значения, сгенерированные ранее.

Вот исправленный код:

private static ArrayList<int[]> randomizer(int arrays, int size, int seed){ 
    ArrayList<int[]> tests = new ArrayList<>(arrays); 
    for (int j = 0; j < arrays; j++) { 
     int[] list = new int[size]; 
     Random r = new Random(seed + j); 
     for(int i = 0; i < size; i++) { 
      list[i] = r.nextInt(5 * size); // Multiplier for how big the numbers get 
     } 
     tests.add(j, list); 
    } 
    return tests; 
} 

public static void main(String[] args) { 
    int tests = 5; 
    int size = 4; 
    ArrayList<int[]> arrays = randomizer(tests, size, 10); 
    for (int i = 0; i < arrays.size(); i++){ 
     int[] ints = arrays.get(i); 
     for (int j = 0; j < ints.length; j++) { 
      System.out.print(ints[j] + ","); 
     } 
     System.out.println(); 
    } 
} 

В основном вам нужно переместить int[] list = new int[size]; линию внутри для цикла, так что вы на самом деле создания новых массивов вместо того, чтобы использовать тот же, каждый раз.

Теперь вы можете заменить цикл печати в методе main() тем, что вам нравится, например, ваши быстрые проверки сортировки. Дайте мне знать, если что-то еще не работает.