2015-01-29 6 views
0

Я пытаюсь случайно захватить целые числа из другого класса и не могу понять, как получить эти значения. Первый класс - это мой исходный генератор случайных чисел. Второй класс - это класс, к которому я пытаюсь получить эти числа. Я создал метод grab, но не могу понять, как получить эти случайные целые числа из класса ArrayBag. Любая помощь будет оценена!Как создать метод для захвата случайного значения из другого класса?

import java.util.Random; 

public final class ArrayBag<T> implements BagInterface<T> 
{ 
    private final T[] bag; 
    private int numberOfEntries; 
    private boolean initialized = false; 
    private static final int DEFAULT_CAPACITY = 6; 
    private static final int MAX_CAPACITY = 10000; 

    /** Creates an empty bag whose initial capacity is 6. */ 
    public ArrayBag() 
    { 
     this(DEFAULT_CAPACITY); 
     System.out.print("Generating 6 random integers 1 - 6 in ArrayBag\n");  

     //Random loop to generate random numbers 1 to 6 
     Random rand = new Random(); 
     for(int start=1; start <=6; start++) 
     { 
      int randInt = rand.nextInt(6); 
      System.out.println("Generated : " + randInt); 
     } 
     System.out.println("Finished\n"); 

    } // end default constructor 

This is my second class and method... 

import java.util.Random; 

public class PopulationBag 
{ 
    public PopulationBag() 
    { 
     ArrayBag ab = new ArrayBag(); 
     LinkedBag lb = new LinkedBag(); 

    } 

    /** 
    * Grab Method 
    */ 

    public int grab() 
    { 
     ArrayBag ab = new ArrayBag(); 
     Random grab = new Random(); 
     for(int start = 1; start <= 6; start++) 
     { 
      int randGrab = grab.nextInt(ab); 
      System.out.println("Randomly grabbed values : " + randGrab); 
     } 
    } 

} 
+0

Вы создаете класс ArrayBag и возводит один в функции захвата (который просто перезаписывает тот, который вы уже сделали в конструкторе), а затем игнорировать его и использовать Случайно снова. Я не понимаю, что вы пытаетесь сделать, но это, вероятно, не так. –

+0

Первая проблема, я вижу, он пытается передать ArrayBag() в nextInt(), который ожидает значение int в качестве параметра. –

ответ

0

Насколько я understant, что вы пытаетесь сделать, это создать класс, который genereates и держит пользователь заданного числа случайных целых чисел и второго класса, которые могут получить доступ к значениям, сгенерированные первым классом.

Я заметил несколько проблем с вашим подходом. Во-первых, вы генерируете случайные числа, но никогда не храните их в любом случае. Если количество случайных ints задано пользователем, вы можете попробовать подход ArrayList или использовать новый подход Java 8 с методом ints() класса Random (который я использовал в приведенном ниже коде). Вам также понадобится метод getter, чтобы сделать доступ к вашей личной переменной возможным.

Рассмотрим код:

public class ArrayBag { 
     private int[] randomBag; 
     private boolean initialized = false; 
     private static final int DEFAULT_CAPACITY = 6; 
     private static final int MAX_CAPACITY = 10000; 

     public ArrayBag() { 
      Random random = new Random(); 

      randomBag = new int[DEFAULT_CAPACITY]; 

      // The method ints introduced in Java 8 accepts three params: 
      // number of ints generated, upper and lower bound between which the ints will be generated. 
      // toArray method passes the generated nums as an dynamically created array, 
      // which you can assign to a variable. 
      randomBag = random.ints(DEFAULT_CAPACITY, 1, DEFAULT_CAPACITY + 1).toArray(); 
     } 

// the 'getter' method 
     public int getRandomInt(int i) { 
      return randomBag[i]; 

     } 
    } 
     /* Second class */ 
     public class PopulationBag { 
     private ArrayBag ab = new ArrayBag(); 
     private Random grab = new Random(); 

     // Are the numbers form the ArrayBag going to be grabbed at random, 
    //or simply one after another? 

     public int[] grabInOrder(int numberOfGrabbedInts) { 
    // Create an array to hold ints. 
      int[] intBag = new int[numberOfGrabbedInts]; 
    // Fill in data to the intBag 
      for (int i = 0; i < numberOfGrabbedInts; i++) { 
    // Call getRandomInt() method form ArrayBag class 
    intBag[i] = ab.getRandomInt(i); 
       System.out.println("Randomly grabbed values : " + intBag[i]); 
      } 

      return intBag; 
     } 

    private int[] grabAtRandom(int numberOfGrabbedInts) { 
      int[] intBag = new int[numberOfGrabbedInts]; 
      for (int i = 0; i < numberOfGrabbedInts; i++) { 
       // This is kind of funky, basically it returns at random the ints saved in ArrayBag. 
       intBag[i] = ab.getRandomInt(grab.ints(1, 1, numberOfGrabbedInts).findFirst().getAsInt()); 
       System.out.println("Randomly-randomly grabbed values : " + intBag[i]); 
      } 
      return intBag; 
     }