L'esercizio dice:
Si richiede di proggettare un metodo che esegue la ricerca binaria di un valore intero (chiave) all'interno di un array di interi ordinato in maniera non decrescente che si comporti nel seguente modo:
1) Se la chiave è contenuta nell'array, il metodo restituisce l'indice di un elemento dell'array il cui valore è uguale a quello della chiave.
2) Se la chiave non è contenuta nell'array, il metodo restituisce una descrizione della sequenza di confronti che sono stati eseguiti per decidere che la chiave non è contenuta nell'array.
Per fare sta cosa usa un'eccezione...tranne che proprio non capisco cosa stia facendo...doh
e codice dell'eccezione:codice:public class EccezioniComeMetodologia{ public static int ricercaBinaria(int[] A, int inizio, int fine, int chiave) throws ChiaveNonTrovataException{ String s; int posizione = -1; // Indica la posizione dell'array dov'è stata trovata la chiave da ricercare if(fine-inizio > 0){ // Se la porzione di array in cui cercare la chiave non è ancora vuota try{ if(chiave < A[(inizio+fine)/2]) // Se è verificata, la chiave và cercata nella prima metà dell'array posizione = ricercaBinaria(A, inizio, (inizio+fine)/2-1, chiave); else if(chiave == A[(inizio+fine)/2]) posizione = (inizio+fine)/2; // Chiave trovata else posizione = ricercaBinaria(A,(inizio+fine)/2+1, fine, chiave); //Se verificato la chiave deve essere cercata nella seconda metà dell'array }catch(ChiaveNonTrovataException e){ // Cattura l'eventuale eccezione // e gestiscila così: s = e.getMessage() + "\t cercato in posizione "+(inizio+fine)/2 + " di valore " + A[(inizio+fine)/2] + "\n"; throw new ChiaveNonTrovataException(s); } } else throw new ChiaveNonTrovataException("chiave non trovata: \n"); return posizione; } public static void main(String[] args){ int[] B = {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29}; int chiave = 4; int posizione = -1; try{ posizione = ricercaBinaria(B,0,B.length-1, chiave); System.out.println(chiave + "trovata in posizione " + posizione); }catch(ChiaveNonTrovataException e){ System.out.println(e.getMessage()); } } }
Da quello che vedo esegue la normale ricerca binaria ricorsiva...tranne che non capisco dove va a sollevare l'eccezione...cioè mi pare che la sollevi nel blocco che gestisce l'eventuale eccezione (nel catch)codice:public class ChiaveNonTrovataException extends Exception{ public ChiaveNonTrovataException(){ } public ChiaveNonTrovataException(String s){ super(s); } }
AHHH non capisco, mi sento stupido...help me :-(
Grazie
Andrea

Rispondi quotando