Array com exception sem precisar

pessoal eu to fazendo uma rotina que pega 9 numeros aleatorios e coloca dentro desse vetor. Depois eu faço uma pesquisa para achar o maior numero entre eles e colocar este mesmo numero dentro do array e no meio. E depois tenho que pegar o lado direito e esquerdo desse esmo vetor e fazer novos vetores… Só que ta dando erro justamente nos novos vetores… O codigo é esse:

public class desafio1{ 
   public static void main(String args[]){ 
       
       
        int v[] = new int[9]; 
        int pe[] = new int[3]; 
        int pd[] = new int[3]; 
        int maior = 0; 
        int n = 0; 
        int o = 0; 
        
        while(n<9){ 
        int nn =(int)(1 + Math.random() * 100); 
        
        if(v[n]==4) 
        continue; 
        if(nn > maior){ 
           maior = nn; 
           v[4]=maior; 
        }else{ 
          v[n]=nn; 
        } 
        n++; 
      } 
        
      for(int x=0; x<3; x++){ 
         pe[x]=v[x]; 
         System.out.println(pe[x]); 
      } 

      for(int y=5; y<8; y++){ 
        pd[o]=v[y]; 
        System.out.println(pd[y]); 
        o++;    
      } 
        

       
       
      System.exit(0); 
   } 
} 

Eu to achando que o erro ocorre nesta parte e interfere na origem dos outros vetores.

 if(v[n]==4) 
        continue; 
        if(nn > maior){ 
           maior = nn; 
           v[4]=maior; 
        }

Alguem tem alguma dica de como melhorar isso?
grato

numa rapida olhada, esta parte do teu codigo

for(int y=5; y<8; y++){ 
         pd[o]=v[y]; 
         System.out.println(pd[y]); 
         o++;    
       }

vai gerar um erro de ArrayOutOfBoundException, porque voce ta acessando a primeira vex pd como pd[5] e a variavel pd so tem 3 posicoes, ou seja, a posicao 5 nao existe e gera o erro

Se realmente tem que usar Array eu faria mais ou menos assim, mas depois da uma olhada em Collections que vc vai ver que da pra fazer isso de forma MUITO mais fácil…

	public static void main(String args[]) {

		int v[] = new int[9];
		//Um array array[3] guarda dados de 0 a 2, ou seja, não cabe 4 valores.
		int pe[] = new int[4];
		int pd[] = new int[4];
		int maior = 0;
		int pos = 0;

		//Carrega Array
		for(int i=0;i<9;i++){
			v[i] = (int) (1 + Math.random() * 100);
		}
		
		//Encontra maior
		for(int i=0;i<9;i++){
			if (v[i] > maior) {
				maior = v[i];
				//armazena qual é a posição do array em que está o maior
				pos = i;
			} 			
		}
		
		//Coloca o maior valor dentro da posicao 4.
		if (pos != 4){
			int temp = v[4];
			v[4]=v[pos];
			v[pos]=temp;
			System.out.println("Maior valor " +v[4]);
		}
		
		//Carrega primeira metade no array PE
		for(int i=0;i<4;i++){
			pe[i] = v[i];
			System.out.println(pe[i]);	
		}
		
		//Carrega segunda metade no array PD
		for(int i=0;i<4;i++){
			pd[i] = v[i+5];
			System.out.println(pd[i]);	
		}

		System.exit(0);
	}