/**Classe contenente un main e una procedura per la fusione invertita di due array
@author Bonetto Isabella mat. 252574
@version 1/12/2004
*/
public class ProvaArray
{
	public static void main(String[] args)
	{
		double[] a=new double[5];
		double[] b=new double[5];
		int[] fusione;
		int i;

		a[0]=1.2;
		a[1]=3.1;
		a[2]=4.9;
		a[3]=5.3;
		a[4]=6.9;

		b[0]=2.2;
		b[1]=3.4;
		b[2]=4.1;
		b[3]=6.6;
		b[4]=8.4;

		fusione=fondiInverti(a,b);

		System.out.println("Fusione Invertita");
		for(i=0;i<fusione.length;i++)
			System.out.println(fusione[i]);
	}

	/**Classe che esegue la fusione invertita di due array double in un array int
	@param a primo array completamente riempito e ordinato che non contiene ripetizioni
	@param b primo array completamente riempito e ordinato che non contiene ripetizioni
	@return array di interi con la fusione dei due invertita*/
	public static int[] fondiInverti(double[] a,double[] b)
	{
		int ia=0,ib=0,jf;
		int[] f=new int[a.length+b.length];

		jf=f.length-1;
		while(ia<a.length && ib<b.length)
		{
			if(Math.round(a[ia])<Math.round(b[ib]))
			{
				f[jf]=(int)Math.round(a[ia]);
				jf--;
				ia++;
			}
			else
			{
				if((int)Math.round(a[ia])>(int)Math.round(b[ib]))
				{
					f[jf]=(int)Math.round(b[ib]);
					jf--;
					ib++;
				}
				else
				{
					f[jf]=(int)Math.round(a[ia]);
					jf--;
					ia++;
					ib++;
				}
			}
		}

		if(ia<a.length)
		{
			while(ia<a.length)
			{
				f[jf]=(int)Math.round(a[ia]);
				jf--;
				ia++;
			}
		}
		else
		{
			if(ib<b.length)
			{
				while(ib<b.length)
				{
					f[jf]=(int)Math.round(b[ib]);
					jf--;
					ib++;
				}
			}
		}

		return compatta(f,jf+1);
	}

	/**funzione che compatta un array rendendolo completamente riempito
	@param a array da compattare
	@param n numero di elementi che contiene
	@return array int completamente riempito*/
	public static int[] compatta(int[] a,int n)
	{
		int[] ret=new int[a.length-n];
		int i;

		for(i=0;i<ret.length;i++)
			ret[i]=a[i+n];

		return ret;
	}
}