Jump to content

[Resolvido] searchAround


c.orelhas
 Share

Recommended Posts

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

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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.