Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.50 KB | None | 0 0
  1. class ArrayHelper {
  2.     /**
  3.      * Metoda wykonuje losowanie <b> bez powtorzen</b> ze zbioru collection i
  4.      * zwraca tablice z wylosowanymi elementami.
  5.      *
  6.      * @param collection tablica z elementami, z ktorych dokonywane jest losowanie
  7.      * @param rnd referencja do odbiektu klasy Random, nalezy jej uzyc do
  8.      *            wygenerowania wyniku
  9.      * @param resultSize rozmiar wynikowej tablicy (nie wiekszy niz
  10.      * ilosc elementow w tablicy collection)
  11.      * @return tablica z elementami wylosowanymi z collection
  12.      */
  13.     public int[] combination( int [] collection, Random rnd, int resultSize ) {
  14.         int[] result = new int[ resultSize ];
  15.  
  16.         /*
  17.          tablica temp sluzy do ustalania wartosci true/false dla indeksu ktory zostal wczesniej wylosowany
  18.          0 dla indeksu wolnego
  19.          1 dla indeksu zajetego
  20.         */
  21.         int[] temp = new int[collection.length];
  22.         for (int j=0; j < temp.length; j++) {
  23.             temp[j] = 0;
  24.         }
  25.  
  26.         int actualIndex = 0;                                    // aktualny indeks tablicy result, inny niz aktualna wartosc zmiennej i w petli
  27.  
  28.         for (int i=0; i< resultSize; i++) {
  29.             int k = rnd.get(collection.length-1);
  30.             if(temp[k] == 0) {                                  // sprawdzam czy wylosowany indeks jest wolny
  31.                 result[actualIndex] = collection[k];
  32.                 temp[k]++;                                      // blokuje indeks
  33.                 actualIndex++;
  34.             }
  35.             else {
  36.                 resultSize++;                                   // jesli indeks zajety, zwiekszam petle
  37.             }
  38.  
  39.         }
  40.         return result;
  41.     }
  42.  
  43.     /**
  44.      * Metoda zwraca tablice zawierajaca te same elementy, ktore przekazane
  45.      * zostaly za pomoca collections. Elementy sa ulozone w nastepujacej
  46.      * kolejnosci (zalozenie - przekazano 3 tablice, w kazdej po 3 elementy):
  47.      * <pre>
  48.      * indeks w tablicy wynikowej | indeks tablicy | indeks elementu tablicy
  49.      *      0                            0                0
  50.      *      1                            1                0
  51.      *      2                            2                0
  52.      *      3                            0                1
  53.      *      4                            1                1
  54.      *      5                            2                1
  55.      *      6                            0                2
  56.      *      7                            1                2
  57.      *      8                            2                2
  58.      * </pre>
  59.      * @param collections przkazane do metody tablice. Wszystkie tablice maja
  60.      * ten sam rozmiar. Zadna z nich nie moze byc null.
  61.      * @return jednowymiarowa tablica zawierajaca odpowiednio
  62.      * ulozone elementy pobrane z przekazanych tablic.
  63.      */
  64.     public int[] interweaving( int[] ... collections ) {
  65.         int[] result = null;
  66.  
  67.         int sizeArray = collections[0].length;
  68.         int sizeCollections = collections.length;
  69.  
  70.         result = new int[sizeArray*sizeCollections];
  71.  
  72.         int tmp = 0;
  73.         for(int i = 0; i < sizeArray; i++) {
  74.             for(int j = 0; j < sizeCollections; j++) {
  75.                 result[tmp] = collections[j][i];
  76.                 tmp++;
  77.             }
  78.         }
  79.  
  80.         return result;
  81.     }
  82.  
  83.     /**
  84.      * Metoda zwraca tablice zawierajaca te same elementy, ktore przekazane
  85.      * zostaly za pomoca collections. Elementy sa ulozone w nastepujacej
  86.      * kolejnosci (zalozenie - przekazano 3 tablice, w tablicy 0 i 2 są 3 elementy,
  87.      * w tablicy o indeksie 1 jest jeden element):
  88.      * <pre>
  89.      * indeks w tablicy wynikowej | indeks tablicy | indeks elementu tablicy
  90.      *      0                            0                0
  91.      *      1                            1                0
  92.      *      2                            2                0
  93.      *      3                            0                1
  94.      *      4                            2                1
  95.      *      5                            0                2
  96.      *      6                            2                2
  97.      * </pre>
  98.      * @param collections przkazane do metody tablice. Nie ma gwarancji,ze
  99.      * wszystkie tablice maja ten sam rozmiar. Zadna z nich nie moze byc null.
  100.      * @return jednowymiarowa tablica zawierajaca odpowiednio
  101.      * ulozone elementy pobrane z przekazanych tablic.
  102.      */
  103.     public int[] interweaving2( int[] ... collections ) {
  104.         int[] result = null;
  105.  
  106.         int sizeCollections = collections.length;
  107.         int sizeArray = 0;
  108.         int maxSize = 0;
  109.  
  110.         for(int i = 0; i < sizeCollections; i++) {
  111.             if(collections[i].length > maxSize)
  112.                 maxSize = collections[i].length;
  113.  
  114.             sizeArray += collections[i].length;
  115.         }
  116.  
  117.         result = new int[sizeArray];
  118.  
  119.         int tmp = 0;
  120.         int buf = 0;
  121.         for(int j=0; j<maxSize; j++) {
  122.             for (int i = 0; i < sizeCollections; i++) {
  123.                 if (collections[i].length > buf) {
  124.                     result[tmp] = collections[i][buf];
  125.                     tmp++;
  126.                 }
  127.  
  128.             }
  129.             buf++;
  130.         }
  131.  
  132.         return result;
  133.     }
  134.  
  135.     public static void main(String[] args) {
  136.         int[] t1 = new int[] { 1, 2, 3 };
  137.         int[] t2 = new int[] { 10, 20, 30 };
  138.  
  139.         ArrayHelper ah = new ArrayHelper();
  140.         // przykladowe wywolanie metody interweaving
  141.         ah.interweaving( t1, t2 );
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement