Codice:
for (i=0; a[i] <= v; i++) {
b[i] = a[i];
k++;
}
Quando accedi ad un array attraverso l'indicizzatore devi sempre assicurarti che l'argomento (i in questo caso) sia minore della lunghezza di quell'array.
In questo caso non l'hai fatto, dato che nel for i cresce potenzialmente all'infinito se non trova nessun elemento di a che sia maggiore di v.
Per cui quando tu invochi
Codice:
visualizza( inserisci(new int[] {7, 8, 10}, 22) ); // (7, 8, 10, 22)
la i supera a.length facendo lanciare l'eccezione.
A prima vista mi sembra che basti sostituire con:
Codice:
for (i=0; a[i] <= v && i < a.length; i++) {
b[i] = a[i];
k++;
}
if (i == a.length)
k++;