Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ArrayHelper {
- /**
- * Metoda wykonuje losowanie <b> bez powtorzen</b> ze zbioru collection i
- * zwraca tablice z wylosowanymi elementami.
- *
- * @param collection tablica z elementami, z ktorych dokonywane jest losowanie
- * @param rnd referencja do odbiektu klasy Random, nalezy jej uzyc do
- * wygenerowania wyniku
- * @param resultSize rozmiar wynikowej tablicy (nie wiekszy niz
- * ilosc elementow w tablicy collection)
- * @return tablica z elementami wylosowanymi z collection
- */
- public int[] combination( int [] collection, Random rnd, int resultSize ) {
- int[] result = new int[ resultSize ];
- /*
- tablica temp sluzy do ustalania wartosci true/false dla indeksu ktory zostal wczesniej wylosowany
- 0 dla indeksu wolnego
- 1 dla indeksu zajetego
- */
- int[] temp = new int[collection.length];
- for (int j=0; j < temp.length; j++) {
- temp[j] = 0;
- }
- int actualIndex = 0; // aktualny indeks tablicy result, inny niz aktualna wartosc zmiennej i w petli
- for (int i=0; i< resultSize; i++) {
- int k = rnd.get(collection.length-1);
- if(temp[k] == 0) { // sprawdzam czy wylosowany indeks jest wolny
- result[actualIndex] = collection[k];
- temp[k]++; // blokuje indeks
- actualIndex++;
- }
- else {
- resultSize++; // jesli indeks zajety, zwiekszam petle
- }
- }
- return result;
- }
- /**
- * Metoda zwraca tablice zawierajaca te same elementy, ktore przekazane
- * zostaly za pomoca collections. Elementy sa ulozone w nastepujacej
- * kolejnosci (zalozenie - przekazano 3 tablice, w kazdej po 3 elementy):
- * <pre>
- * indeks w tablicy wynikowej | indeks tablicy | indeks elementu tablicy
- * 0 0 0
- * 1 1 0
- * 2 2 0
- * 3 0 1
- * 4 1 1
- * 5 2 1
- * 6 0 2
- * 7 1 2
- * 8 2 2
- * </pre>
- * @param collections przkazane do metody tablice. Wszystkie tablice maja
- * ten sam rozmiar. Zadna z nich nie moze byc null.
- * @return jednowymiarowa tablica zawierajaca odpowiednio
- * ulozone elementy pobrane z przekazanych tablic.
- */
- public int[] interweaving( int[] ... collections ) {
- int[] result = null;
- int sizeArray = collections[0].length;
- int sizeCollections = collections.length;
- result = new int[sizeArray*sizeCollections];
- int tmp = 0;
- for(int i = 0; i < sizeArray; i++) {
- for(int j = 0; j < sizeCollections; j++) {
- result[tmp] = collections[j][i];
- tmp++;
- }
- }
- return result;
- }
- /**
- * Metoda zwraca tablice zawierajaca te same elementy, ktore przekazane
- * zostaly za pomoca collections. Elementy sa ulozone w nastepujacej
- * kolejnosci (zalozenie - przekazano 3 tablice, w tablicy 0 i 2 sÄ 3 elementy,
- * w tablicy o indeksie 1 jest jeden element):
- * <pre>
- * indeks w tablicy wynikowej | indeks tablicy | indeks elementu tablicy
- * 0 0 0
- * 1 1 0
- * 2 2 0
- * 3 0 1
- * 4 2 1
- * 5 0 2
- * 6 2 2
- * </pre>
- * @param collections przkazane do metody tablice. Nie ma gwarancji,ze
- * wszystkie tablice maja ten sam rozmiar. Zadna z nich nie moze byc null.
- * @return jednowymiarowa tablica zawierajaca odpowiednio
- * ulozone elementy pobrane z przekazanych tablic.
- */
- public int[] interweaving2( int[] ... collections ) {
- int[] result = null;
- int sizeCollections = collections.length;
- int sizeArray = 0;
- int maxSize = 0;
- for(int i = 0; i < sizeCollections; i++) {
- if(collections[i].length > maxSize)
- maxSize = collections[i].length;
- sizeArray += collections[i].length;
- }
- result = new int[sizeArray];
- int tmp = 0;
- int buf = 0;
- for(int j=0; j<maxSize; j++) {
- for (int i = 0; i < sizeCollections; i++) {
- if (collections[i].length > buf) {
- result[tmp] = collections[i][buf];
- tmp++;
- }
- }
- buf++;
- }
- return result;
- }
- public static void main(String[] args) {
- int[] t1 = new int[] { 1, 2, 3 };
- int[] t2 = new int[] { 10, 20, 30 };
- ArrayHelper ah = new ArrayHelper();
- // przykladowe wywolanie metody interweaving
- ah.interweaving( t1, t2 );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement