Embaralhar array de char

ola , preciso fazer um embaralhamento de um array de char , no compilador não acusa erro algum mas quando eu executo ele me manada para esta linha( arrayembaralhado[i]=array[delega]; )com um erro mas não sei aonde esta o erro alguém pode me ajudar?

public char[] Embaralhar(){
	int i=0,cont=0,j=0;
	int delega=0;
	int[] testador = new int[20];
	char[] array = new char[20];
	char[] arrayembaralhado = new char[20];
	if(aux==0){
	array = b.getpalavra().toCharArray();
	int tamanhoword = array.length;
	//String[] word = new String[tamanhoword];
	//char novosolucao = array[0];
	for(i=0;i<tamanhoword;i++){
		cont++;
		testador[i]= gerador.nextInt(tamanhoword+1);
		delega = testador[i];
		if(i!=0){
		for(j=0;j<cont;j++){
			if(testador[j]==delega){
				i--;
			}
			arrayembaralhado[i]=array[delega];
		}
		}else
		arrayembaralhado[i]= array[delega];
	}
	
		
	
	String b = arrayembaralhado.toString();
	System.out.println("embaralhada ="+arrayembaralhado);
	System.out.println("normal ="+array);	
return array;		
	}
	return null; 
}

Não dá pra testar seu código, pois você postou ele incompleto.
Faltam as variáveis, aux, b e gerador.

Imagino que suas variáveis array e arrayembaralhado estejam com tamanhos diferentes, aí em determinado momento está tentando acessar um índice que não existe.

public static void main(String[] args) {
		
		char[] letras = new String("abcde").toCharArray();
		char[] embaralhadas = new char[letras.length];
		
		Random r = new Random();
		
		for(int i = 0; i < embaralhadas.length;i++){
			int n = 0;
			do{
				n = r.nextInt(letras.length);				
			}while(jaTem(letras[n], embaralhadas));			
			embaralhadas[i] = letras[n];
		}		
		Arrays.asList(embaralhadas).forEach(System.out::print);		
	}
	
	public static boolean jaTem(char letra, char[] lista){
		for (int i = 0; i < lista.length; i++) {
			if(lista[i] == letra){
				return true;
			}
		}		
		return false;
	}