c.orelhas Posted March 28, 2014 Report Share Posted March 28, 2014 Bom dia, Estou a desenvolver um trabalho para a escola e precisava de uma ajudinha.. Este é o código que eu tenho até agora, no entanto não é eficiente o suficiente e necessito converter os 2 "for" que tenho apenas em 1 e conseguir retornar o que faz falta. Deixo aqui o que é suposto fazer com o programa. "No sentido de melhorar a eficiência da pesquisa linear desenvolva um método de pesquisa que deve receber uma posição prevista para o elemento. O método deve começar por procurar nas imediações dessa posição e ir alargando a pesquisa até percorrer todo o vetor ou encontrar o elemento pretendido. O método deve devolver a posição onde foi encontrado o elemento ou -1 caso não o encontre. Utilize a base fornecida nas aulas práticas, com a classe Dicionário e o respetivo ficheiro de texto. Crie uma classe de teste apropriada que testar o seu método, não escreva uma função principal na classe Dicionario. Assinatura do método: public int searchAround (String x, int prevision)" public int searchAround(String x, int prevision){ String[] s = getDicionario(); /*for(int i = 0,j=0; i < s.length-1 || j<prevision; i++) { if (s[i].compareTo(x) == 0) { return (i+2); //se a palavra for igual retorna a posição } }*/ //neste momento estou a utilizar estes 2 "FOR" para percorrer, no entanto é necessário ter eficiência e precisava de contornar este "problema" com apenas 1 for. //De referir que estes 2, está a fazer o trabalho certo. for (int i= prevision; i<s.length-1;i++) { if(s[i].compareTo(x) == 0) { return (i+2); } for (int j=0; j<prevision; j++) { if(s[j].compareTo(x)==0){ return (j+2); } } } return -1; //caso nao encontre a palavra retorna -1 } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 28, 2014 Report Share Posted March 28, 2014 (edited) public int searchAround(String x, int prevision) { String[] dic = getDicionario(); // valor de distência do valor previsto int diff = 0; // ciclo de pesquisa while (prevision - diff >= 0 || prevision + diff < dic.length()) { // verificar se algum dos valores que distam "diff" do valor previsto é o pretendido if ((int index = prevision - diff) >= 0 && dic[index].compareTo(x) == 0) return index; if ((int index = prevision + diff) < dic.length() && dic[index].compareTo(x) == 0) return index; } // incrementar a distância a procurar ++diff; } // retornar o valor de que o valor não foi encontrado return -1; } Edited March 28, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now