Ciao sopra ti ho scritto un'implementazione che soddisfa la tua richiesta e un metodo main di test che ti mostra come questo algoritmo sia perfettamente equivalente all'implementazione che trovi in Arrayscodice:package test; import java.util.Arrays; public class TestBS{ private double[] a = new double[]{1.2,3.17,15.3,15.33,16.0}; public void createSortedRandomArray() { int MIN = 0; int MAX = 5000; //alloca l'array con 1000 posizioni a = new double[1000]; //genera mille numeri random e li inserisce nell'array for (int i = 0; i < a.length; i++) { a[i] = Math.random() * MAX - MIN + MAX; } //ordina l'array (prerequisito per la ricerca binaria //è l'ordinamento dell'array in input) Arrays.sort(a); } public void printA() { if(a.length > 0) System.out.print(a[0]); for (int i = 1; i < a.length; i++) { System.out.print("," + a[i]); } System.out.println(); } public double[] getA() { return a; } public int binarySerch(double number) { int i = 0; int j = a.length - 1; while (i <= j) { int index = (i + j) / 2; if (a[index] < number) i = index + 1; else if (a[index] > number) j = index - 1; else return index; } return -(i + 1); } public static void main(String[]args){ TestBS test = new TestBS(); //genera un array casuale ordinato di 1000 elementi test.createSortedRandomArray(); //stampa l'array generato test.printA(); //testa l'uguaglianza dei due algoritmi per 100000 volte double[] array = test.getA(); boolean success = true; for (int i = 0; i < 100000; i++) { //genera un numero random da 0 a 7000 da ricercare double toSearch = Math.random() * 7000 - 0 + 7000; //cerca con il mio algoritmo int mine = test.binarySerch(toSearch); //cerca con l'algoritmo java int java = Arrays.binarySearch(test.getA(), toSearch); if(mine != java) { System.out.println("attenzione: i due algoritmi differiscono se si cerca il numero " + toSearch); success = false; break; } } if(success) System.out.println("i due algoritmi coincidono perfettamente"); } }