Lógica

Bem estou fazendo um programa que faz uma pesquisa sequencial com sentilena em um vetor o código esta logo abaixo:



import javax.swing.JOptionPane;


public class Sequencial_com_sentinela
{
	public static boolean pesSeq(int x,int vet[])
	{
		int i;
		i=0;
		vet[vet.length-1]=x;
		
		while(vet[i]!=x) i++;
		
		if(i==vet.length-1)//sentinela
			return false;
		else
			return true;
	}
	public static void main(String args[])
	{
		
		int vet[] = {9,9,9,9,9,9,9,9,9,11};
		
		int x=11;
		
		if(pesSeq(x,vet)== true)
			JOptionPane.showMessageDialog(null,"Elemento encotrado");
		else
			JOptionPane.showMessageDialog(null,"Elemento não encontrado");
	}
}

Neste caso a sentinela vai ser a última posição do vetor mais se eu estiver
procurando a última posição do vetor não vai encontar, como eu coloquei no meu código, estou procurando o elemento 11 como o elemento 11 está na última posição do vetor o programa está considerando que o elemento não foi encontrado, tem como eu modificar isso para que o elemento procurado for na última posição ele informe que achou usando a sentinela…?

troca esse trecho

if(i==vet.length-1)//sentinela return false; else return true;

por isso

if(i==vet.length)//sentinela return false; else return true;

vê se não vai estourar o vetor

No cara ai sempre vai retorna verdadeiro pois vet.length é igual a 10
e o valor de i é igual a 9 dai ele nunca vai entrar nesta instrução

if(i==vet.length)//sentinela
return false;

Sua comparação deve ser essa

 if(i-1==vet.length)

Na estrutura while a variável sentinela (i) sempre faz n+1 vezes comparações (n = tamanho do vetor em Java). Ai vc reduz o i em 1, senão há estouro de indíce do array).

Falow :slight_smile: