/**
    Classe della Prova di Esame di Programmazione I e Laboratorio
    del 25 marzo 2003
*/

public class ProvaArray3 {

    /**
    deve prendere come parametro due array di elementi di tipo 
    intero di uguale lunghezza e restituire un nuovo array di
    elementi di tipo intero la cui lunghezza e` il doppio della
    lunghezza degli array in input contenente nelle posizioni
    pari (0, 2, 4, ecc.) gli elementi del primo array in input
    e nelle posizioni dispari gli elementi del secondo array in input
    @param a primo array di elementi di tipo intero 
    @param b secondo array di elementi di tipo intero
    @return l'array fusione alternata degli array in input
    */
    public static int[] fondiArrayI(int[] a, int[] b) {
        if ((a == null) || (b == null))
            return null;
        if (a.length != b.length)
            return null;
        int[] ris = new int[a.length * 2];
        int i = 0;
        while (i < a.length) {  // e` possibile usare anche il "for" in alternativa
            ris[i * 2] = a[i];
            ris[i * 2 + 1] = b[i];
            i++;
        }
        return ris;
    }

    /**
    deve prendere come parametro due array di elementi di tipo 
    intero di uguale lunghezza e restituire un nuovo array di
    elementi di tipo intero la cui lunghezza e` il doppio della
    lunghezza degli array in input contenente nelle posizioni
    pari (0, 2, 4, ecc.) gli elementi del primo array in input
    e nelle posizioni dispari gli elementi del secondo array in input
    @param a primo array di elementi di tipo intero 
    @param b secondo array di elementi di tipo intero
    @return l'array fusione alternata degli array in input
    */
    public static int[] fondiArrayII(int[] a, int[] b) {
        if ((a == null) || (b == null))
            return null;
        if (a.length != b.length)
            return null;
        int[] ris = new int[a.length * 2];
        int i = 0;
        while (i < ris.length) {
            ris[i] = a[i / 2];
            i++;
            ris[i] = b[i / 2];
            i++;
        }
        return ris;
    }

    /**
    Stampa un array di interi. Se l'array e` null lo segnala.
    @param a l'array di interi
    */
    public static void printArray(int[] a) {
        if (a == null)
            System.out.println("L'array e` uguale a null!");
        else
            for (int i = 0; i < a.length; i++)
                System.out.println("Elemento " + i + ": " + a[i]);
    }

    /**
        Risultato atteso dal main:

        Elemento 0: 1
        Elemento 1: 3
        Elemento 2: 6
        Elemento 3: 5
        Elemento 4: 3
        Elemento 5: 8
        Elemento 0: 3
        Elemento 1: 3
        Elemento 2: 5
        Elemento 3: 5
        Elemento 4: 8
        Elemento 5: 8
        L'array e` uguale a null!
        L'array e` uguale a null!

    */
    public static void main(String[] args) {
        int[] a = {1, 6, 3};
        int[] b = {3, 5, 8};
        printArray(fondiArrayI(a, b));
        printArray(fondiArrayII(a, b));
        int[] a1 = {1, 6};
        printArray(fondiArrayI(a1, b));
        printArray(fondiArrayII(a1, b));
    }

}