Ajuda com estrutura de dados em java

5 respostas
java
paulo9

Boa noite pessoal,estou com uma dificuldade em implementar uma fila,que na qual me diz se contem um determinado elemento.

Código:

public boolean contem(int elemento) {
       for(int i=0;i<qtdeElementos;i++){
           if(elemento[i].equals(elemento)){

Minha outra dúvida é como retornar a distancia de um objeto em relação ao primeiro elemento da fila.

public int distancia(int  elemento) {

Desde já agradeço a compreensão de todos!

5 Respostas

Dragoon

Não é o próprio i?

Porque se esse if for verdade

if(elemento[i].equals(elemento))
{

é o valor do i a distância que se for o index é o i agora se for começando com 1 é i+1!

Essa é a sua duvida?

paulo9

Então Dragon,estou com um erro nessa estrutura de decisão.

peczenyj

Aparentemente vc disse q tem um erro 6 horas atras, mas nao disse qual.

Existem alguns desafios sobre pedir ajuda em um forum:

Primeiro, as pessoas nao estao falando contigo no chat do facebook, onde pode rolar um dialogo tipo “oi”, “oi”, “tudo bom?”, “tudo e vc”. Entao se vc espera uma conversa mais intercalada isso é mais dificil de acontecer. O ideal é vc dar todas as informações possiveis, e talvez alguem consiga responder de uma tacada. E todos ficam felizes :slight_smile:

Segundo: nao estamos fisicamente do seu lado, portando dizer “deu erro” não ajuda pois… Ninguem sabe qual erro alem de vc.

Eu vou tentar adivinhar. Missing return?

Quando vc procura algo, tem que definir o que vai acontecer SE vc achar e se vc NÃO achar. Por exemplo se vc retorna o indice de um array, podemos criar uma convenção de retornar -1 se não encontrar nada. Ou lançar exception. Ou criar uma estrutura mais adequada de dados tipo Resposta que diz se foi sucesso e o que achou.

Boa sorte

paulo9

PEC, irei me atentar a esses detalhes,obrigado.Irei postar o código para maior esclarecimento:

package no;


public class FilaEncadeada implements IFILA {

    int inicio,fim,tamanho,qtdeElementos,limpando,total;
    int f[];
    
   
 public FilaEncadeada(){
        inicio = fim = -1;
        tamanho = 100;
        f = new int[tamanho];
        qtdeElementos = 0;
    }
   
//Limpa toda fila 
    @Override
    public void limpar() {
      int A[]=new int[20];
        if(limpando==0)
            System.out.println("Fila está vazia");
       if(limpando==1)
            limpando = 0;
       if(limpando<1){
           for(int i=0;i<(limpando-1);i++)
               A[i]= A[i+1];
           limpando--;
        }
        
    }

    //Tamanho de elementos que a fila possui
    @Override
    public int tamanho() {
        int qtdeElemento= 0;
        return qtdeElemento;
    }

    //Retorna se a fila está vazia
    @Override
    public boolean estaVazia() {
        if(qtdeElementos==0){
           return true; 
        }else{
            
        }
        return false;
    }

    //Indica se a fila possui o elemento
    @Override
    public boolean contem(int elemento) {
        for(int i=0;i<qtdeElementos;i++){
           if(elemento[i].equals(elemento)){   //Aqui está o erro.
               
           }
       }
        return false;
    }

    //Retorna a distancia de um objeto em relação ao primeiro elemento da fila
        //O vizinho mais proximo possui distancia 1 do primeiro elemento
    @Override
    public int distancia(int  elemento) {
     
        int fila[],inicio,fim;
       
//Obs: Ainda não conclui essas linhas de código.
        
        
        return 0;
    }
    
     //Remove um elemento da fila
    @Override
    public int remover() {
       if(!estaVazia()){
           inicio++;
           qtdeElementos--;
       } 
    return qtdeElementos; 
    }
   
     //Adciona um elemento na fila de acordo com a estrutura
    @Override
    public void enfileirar(int elemento) {
            int ind, fim, valor;
        String incluir;
        int [] fila = new int [10];
        for(ind=0; ind<10; ind++)
        {
            fila[ind] = 0;
        }
        fim = 0;
        
             
           }
           
    }
peczenyj

Mano,

assim o seu codigo possui inumeros problemas. poderiamos debater isso por horas. Vamos Pensar em como Resolver isso?

Uma Fila Encadeada usa ARRAY? Eu, pessoalmente, acho que não. até é possivel emular uma fila mas é muito trabalhoso. talvez isso seja o seu exercicio, ok, vamos admitir que vc precisa usar um array mas a implementação natural é ter um elemento No que tem uma referencia ao proximo elemento.

vc até pode implementar uma fila em um array mas uma fila significa FIFO - first in, first out.

vc quer fazer

fila.enfileirar(1);
fila.enfileirar(2);
fila.enfileirar(3);
int x = fila.remover(); // retorna 1;
int y = fila.remover(); // retorna 2;
int z = fila.remover(); // retorna 3;

simples assim. se o seu codigo não faz isso então não esta implementado corretamente.

como fazer isso com um array? bom um array tem um tamanho, digamos 100.

vc cria uma variavel FIM e inicializa com -1;

vai enfileirar? vc incrementa o FIM ( soma 1) e usa este valor como indice do seu array.

vai desenfileirar? vc

  1. guarda qual elemento esta na posição 0; vc vai retornar isso. chama de ‘primeiro’
  2. vc faz um loop usando a variavel index ( i para os intimos ) de 1 até FIM onde vc faz dentro do loop: fila[ index - 1 ] = fila[ index ];
  3. vc decrementa o FIM (subtrai 1 )
  4. retorna o primeiro.

o resto vai pipocar a partir dessa ideia.

por exemplo eu falo FIM e vc usa qtdeElementos. serve para a mesma coisa. eu gosto, particularmente, de usar o fim. o fim me diz onde no array esta o ultimo elemento. eu sei que o array começa em 0 então se o fim e 5, tem 0,1,2,3,4,5,6 elementos: FIM + 1.

como vc ve se esta vazio? se FIM menor que zero, então esta vazio

como vc sabe se contem algo? vamos procurar do INICIO (0) ao FIM. achou? retorna true.

if(elemento[i].equals(elemento)){

mano a sua fila se chama f ( poderia se chamar fila pra ser explicito ). vc não tem nada que usar elemento[i] aqui. e f é um array de inteiros, isso é tipo primitivo, vc não tem equals ( ok existe o wrapper Integer e autobox no java mas não vamos botar o carro na frente dos bois ).

reflita sobre estes pontos.

Criado 31 de outubro de 2016
Ultima resposta 2 de nov. de 2016
Respostas 5
Participantes 3