|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
[Java] Consiglio su metodo sulla ricerca binaria ricorsiva [Risolto]
Ciao a tutti.
Vi vorrei chiedere un consiglio su come realizzare questo metodo che mi è stato richiesto in un esercizio. Premetto che non desidero avere risolto l'esercizio, ma solamente un consiglio su come procedere, altrimenti non imparo nulla Esercizio: si scriva un metodo che implementi la ricerca binaria in maniera ricorsiva. Il metodo deve funzionare su array dello stesso tipo dell'elemento cercato. Il seguente metodo funziona solo con array di tipo int: Codice:
public static int binario (int [] a, int n, int inizio, int fine)
{
int centro = (inizio+fine)/2;
if (inizio > fine)
return -1;
else if (a[centro] == n)
return centro;
else if (a[centro] < n)
return binario(a, n, centro+1, fine);
else
return binario(a, n, inizio, centro-1);
}
Ultima modifica di cybergabry : 11-11-2009 alle 10:55. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Dovresti usare i generici, non è un argomento semplicissimo però. Stai seguendo una guida?
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
Quote:
Non conosco questi generici. Nel libro c'è scritto che il metodo da me postato sopra può essere reso generico utilizzando il metodo compareTo() dell'inferfaccia Comparable per effettuare i confronti ma non capisco cosa intende dire. Ultima modifica di cybergabry : 10-11-2009 alle 23:21. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
In effetti forse usare i generici è esagerato in questo caso. Puoi usare questa intestazione invece della precedente:
Codice:
public static int binario (Comparable [] a, Comparable el, int inizio, int fine) Quando userai questo metodo gli passerai un array di oggetti che implementano Comparable (ad esempio String, oppure una classe creata da te). |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
Ho realizzato il software. Eclipse mi da dei warning in public static int binario (Comparable arr[], Comparable elem, int inizio, int fine) e precisamente nei primi due parametri.
Il warning è: "Comparable is a raw type. References to generic type Comparable<T> should be parameterized" In effetti il programmino non funziona perchè mi dice sempre che l'elemento non è presente nell'array anche quando invece è presente. Codice:
import jbook.util.Input;
import java.util.Arrays;
public class RicercaBinaria {
public static void main(String[] args) {
int quanti = Input.readInt("Quanti elementi vuoi inserire nell'array? ");
String [] array = new String [quanti];
for (int i=0; i < quanti; i++)
array[i] = Input.readString("> ");
Arrays.sort(array);
String cercato = Input.readString("Inserisci l'elemento da cercare: ");
int ris = binario(array, cercato, 0, quanti-1);
if (ris == -1)
System.out.println("Elemento non trovato");
else
System.out.println("L'elemento è presente nell'array");
}
public static int binario (Comparable arr[], Comparable elem, int inizio, int fine)
{
int centro = (inizio + fine)/2;
if (inizio > fine)
return -1;
else if (elem == arr[centro])
return centro;
else if (elem.compareTo(arr[centro]) > 0)
return binario (arr, elem, centro+1, fine);
else
return binario (arr, elem, inizio, centro-1);
}
}
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Se sei curioso, una spegazione del warning la trovi in questo post. Quote:
Codice:
public static int binario (Comparable arr[], Comparable elem, int inizio, int fine)
{
int centro = (inizio + fine)/2;
if (inizio > fine)
return -1;
else if (elem == arr[centro])
return centro;
else if (elem.compareTo(arr[centro]) > 0)
return binario (arr, elem, centro+1, fine);
else
return binario (arr, elem, inizio, centro-1);
}
}
Codice:
if (elem.compareTo(arr[centro]) == 0)
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 11-11-2009 alle 11:55. |
||
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Jan 2008
Città: Alcamo (TP)
Messaggi: 45
|
[quote=banryu79;29641606][quote=cybergabry;29640287]
Il warning è: "Comparable is a raw type. References to generic type Comparable<T> should be parameterized" [quote] Non preoccuparti di questo warning, per il momento, il tuo codice è sintatticamente corretto. Se sei curioso, una spegazione del warning la trovi in questo post. [quote=cybergabry;29640287] In effetti il programmino non funziona perchè mi dice sempre che l'elemento non è presente nell'array anche quando invece è presente. Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:14.




















