codice:
for(int i=0;i<13;i++){ 
    arrayCarte[i] = new Card(i+1,"C",n+1);
    n++; 
} 
for(int i=0;i<13;i++){ 
    arrayCarte[i] = new Card(i+1,"D",n+1); 
    n++; 
}
 for(int i=0;i<13;i++){ 
     arrayCarte[i] = new Card(i+1,"F",n+1); 
     n++; 
} 
for(int i=0;i<13;i++){ 
     arrayCarte[i] = new Card(i+1,"P",n+1);
     n++; 
}
Se in ogni ciclo, ri-inizializzi i = 0, andrai sempre ad assegnare solo i primi 13 elementi dell'array. Tra l'altro perdendo i puntatori agli oggetti che hai creato nei primi tre cicli. Da qui, se provi ad accedere alle posizioni >12 mandi tutto in crash, visto che non si sa a cosa puntano