in un esercizio viene richiesto di creare un array dinamico dove si possano inserire dati di tipo int in un array, di vedere se l'array è ordinato e inoltre di creare un secondo array ove siano eliminati i doppioni del caso. inoltre bisogna farne il collaudo con 2 array dati dal prof. Il problemi sono un paio, tanto per cominciare ogni volta che faccio una scelta dal menù, il menù stesso viene stampato all'incirca dalle 3-4 volte. inoltre volendo popolare l'array in automatico mi da index out of bound e non riesco a capire dove sta l'errore. se qualcuno dall'occhio esperto mi riesce a farmi capire dove sbaglio glie ne sarei veramente grato
p.s. ho diviso i metodi da una parte e il main da un'altra perchè mi è stato richiesto così. inoltre non ci sono sono metodi privati poichè non richiesti

classe funzioni
codice:
import java.io.*;
public class funzioni {

public static void menù(){
	System.out.println("scegliere tra una delle seguenti opzioni");
	System.out.println("1. Ordina Array");
	System.out.println("2. Determinare se l'array è crescente");
	System.out.println("3. Eliminare doppioni nell'array");
	System.out.println("4. Popola array con il caso A");
	System.out.println("5. Popola array con il caso b");
	System.out.println("6. Inserire dati da tastiera");
	System.out.println("Premere '0' per uscire dal programma");
	System.out.println(" ");
}
public static int[] popolaArray1(int a[]){
	int [] array1 = {58, 10, 32, 21, 10, 32, 14, 56};
	int [] z = new int[array1.length+1];
	for(int i=0; i<a.length; i++){
		z[i]=a[i];
	}
		
	return z;
}
public static void stampaArray (int []a){
	for(int i=0; i<a.length; i++){
		System.out.println("Elemento array "+(i+1)+" :"+a[i]);
	}
}
public static int[] insert(int []a) throws IOException{
	String temp;
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	for(int i=0; i<a.length ; i++){
		System.out.println("inserire "+(i+1)+" elemento array (solo numeri interi");
		temp =br.readLine();
		a[i]=Integer.parseInt(temp);
	}
	return a;
}
public static void ordine(int []a){
	for(int i=0; i< a.length; i++){
		if(a[i]<=a[i+1])System.out.println("array ordinato in maniera crescente");
		else System.out.println("array ordinato in maniera non crescente");
	}
}
public static int [] eliminaDoppioni(int []a){
	int  m = a.length;
	int [] z = new int [m];
	for(int i=0; i<a.length; i++){
	for (int j =i+1; j< a.length; j++){
		if(a[i] == a[j]){
			i++;
			m=m-1;
		}
		else z[i]=a[j];
	}
	}
	return z;
}
}
classe collaudo (main)
codice:
import java.io.*;


public class collaudo {
public static void main(String args[]) throws IOException{
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	int m=0;
	int temp;
	int [] a = {58, 10, 32, 21, 10, 32, 14, 56};
	int [] b = {13, 27, 27, 32, 56, 56, 56};
	int [] z = new int[10];
	char choice;
	do{	for(;;){	
		funzioni.menù();
		choice = (char) br.read();
		switch (choice){
		case '0':
			System.out.println("Programma terminato correttamente");
			break;
		case '1':
			funzioni.stampaArray(z);
			break;
		case '2':
			funzioni.ordine(z);
			break;
		case '3':
			funzioni.eliminaDoppioni(z);
			break;
		case '4':
			m=a.length;
			for(int i=0; i<a.length; i++){
				z[i]=a[i];
			}
			funzioni.stampaArray(z);
			break;
		case '5':
			m=b.length;
			for(int i =0; i<b.length; i++){
				z[i]=b[i];
			}
			funzioni.stampaArray(z);
		break;
		case'6':
			System.out.println("inserire dimensione array");
			temp= br.read();
			m=m+temp;
			funzioni.insert(z);
			break;
	}
	}
	}while(choice=='\n'||choice=='\r' && choice !='0');
}
}