D4rkAng3l
02-05-2009, 17:20
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
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());
}
}
}
e codice dell'eccezione:
public class ChiaveNonTrovataException extends Exception{
public ChiaveNonTrovataException(){
}
public ChiaveNonTrovataException(String s){
super(s);
}
}
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)
AHHH non capisco, mi sento stupido...help me :-(
Grazie
Andrea
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
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());
}
}
}
e codice dell'eccezione:
public class ChiaveNonTrovataException extends Exception{
public ChiaveNonTrovataException(){
}
public ChiaveNonTrovataException(String s){
super(s);
}
}
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)
AHHH non capisco, mi sento stupido...help me :-(
Grazie
Andrea