package javacodebook.collections.array.copy;

public class ArrayCopy {

    private static java.util.Random random = new java.util.Random(1000000);

    public static void main(String[] args) {
        //ein leeres Array mit 5 Plätzen
        int[] intArray = new int[5];
        int index = 0;
        int newValue = 0;
        //Eine unbekannte Menge an Zufallszahlen wird erzeugt und im Array
        //gespeichert.
        while(newValue >= 0) {
            // durch die Übergabe von index wird sicher gestellt, dass
            //mindestens die ersten 20 int-Werte positiv sind.
            newValue = getNewValue(index);
            System.out.println(newValue);
            //Wenn die Grenze des Arrays bereits erreicht ist, wird ein
            //neues Array mit mehr Platz erzeugt und die Daten werden
            //hineinkopiert
            if(index > intArray.length -1) {
                int[] tmp = new int[intArray.length + 5];
                System.arraycopy(intArray, 0, tmp, 0, intArray.length);
                intArray = tmp;
            }
            intArray[index++] = newValue;
        }
        System.out.println("Das intArray enthält jetzt " + index + " Daten");
        System.out.println("und hat eine Länge von " + intArray.length);
    }

    /**
     * Liefert einen beliebigen Integer-Wert. Solange der Index kleiner 20 ist,
     * werden keine negativen Werte zurückgeliefert.
     */
    private static int getNewValue(int index) {
        return index < 20 ? Math.abs(random.nextInt()) : random.nextInt();
    }
}
