Busca binária, onde receba um valor genérico e uma List

Estou com erro no método e não conseguo saber o que fazer ?? ajuda por favor!!
Escreva um programa que tenha um método de busca binária, onde receba um valor genérico e uma List.
Deve retornar o índice em que o elemento se encontra nessa lista ou -1, caso o elemento não seja encontrado.
No m

Se você puder postar o código e o erro que está tendo ajudaria um pouco

É isso, tchê?

[code]public class Test extends TestCase{

public void test(){
	List<Integer>list = new ArrayList<>();
	for(int i : new int[]{1, 5, 4, 3, 2})
		list.add(i);
	assertTrue( teste(list, 3) == 2);
	assertTrue( teste(list, 6) == (-1));
}

private int teste(List<Integer>list, int procura){
	Integer[] array = new Integer[list.size()];
	list.toArray(array);
	Arrays.sort(array);
	int binarySearch = Arrays.binarySearch(array, procura);
	return binarySearch >= 0 ? binarySearch : -1;
}

}
[/code]

É quase isso, gustavocontabeis. Só que seu método não é genérico.

E por que você transforma a lista em array? a classe Collections também possui os métodos sort e binarySearch

Isso é exercício de aula de Estrutura de Dados, ele quer uma implementação de busca binária, não um que usa a do Java que já está pronta.

No Wikipedia tem um pronto para você estudar, e alterar de array para list: http://pt.wikipedia.org/wiki/Pesquisa_binária#Java

Só precisa antes montar uma lista já ordenada de valores, ou não vai funcionar.

Desculpa galera, q sou novo aqui ficou meio incompleto

o codigo tá aqui mas
mas nao ta retornando
coloquei varias saidas pra ver onde ta passando o programa e nao to encontrando erro nenhum

package exericiobinario;

import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

public class Main {

public static <E extends Comparable<E>> int BuscaBinaria (List<E> lista, E valor){

    int esq = 0;
    int dir = lista.size();
    int valorMeio;
    
    valorMeio = esq + ((dir - esq) / 2);
    E meio = lista.get(valorMeio);
    System.out.println("valor do meio" + valorMeio +" Valor esquerda" + esq + "valor direita "+ dir);

    if (lista.size() <= 1 && valor.equals(meio)){
        System.out.println("Todos os numeros que contem na lista devem acabar aqui o programa");
        return lista.indexOf(valor);
    }else if (lista.size() <= 1 && !valor.equals(meio)){
        System.out.println("Qualquer que nao contenha para aqui");
        return -1;
    }else if (valor.equals(meio)){
        System.out.println("Todos os numeros que contem na lista devem acabar aqui o programa");
        return lista.indexOf(valor);
    }else if (valor.compareTo(meio) < 0){
        System.out.println("passa aki4++++");
        return BuscaBinaria(lista.subList(esq, valorMeio), valor);
    }else if (valor.compareTo(meio) > 0){
        System.out.println("passa aki5++++");
        return BuscaBinaria(lista.subList(valorMeio, dir), valor);
    }else
        return -1;
}

public static <E> void main(String[] args) {

    List<Integer> lista = new ArrayList<Integer>();

    lista.add(1);
    lista.add(2);
    lista.add(3);
    lista.add(4);
    lista.add(5);
    lista.add(6);
    lista.add(7);
    lista.add(8);
    lista.add(9);
    lista.add(10);

    String resp = JOptionPane.showInputDialog(null, "Qual o numero que deseja?");
    int procura = Integer.valueOf(resp);

    BuscaBinaria(lista, procura);

}

}

Alguém por favor
me ajude

Por favor, quando for postar código, use as tags .

O fato de não ter usado elas pode ter sido o motivo de ninguém ter te ajudado até agora.

Mas vamos ao seu problema, o que ocorre de errado? Você não deveria atribuir o retorno do método BuscaBinaria a alguma variável?