Imprimir fila

21 respostas
Gabriel_Davi

Ae pessoal finalmente comecei a implementar meu código pra fila de prioridade...mas não estou sabendo fazer a impressao de uma fila de determinada prioridade...
Vou colar aqui uma parte do código..

//FilaDePrioridade.java
public class FilaDePrioridade
{
  private Fila v[]=new Fila [4];
  private  NoFila f;
  public FilaDePrioridade()
  {
      int i; //indice contador
      for(i=0; i<4; i++)
      {
          v[i] = new Fila();
      }
  }
  
  // Inserir na fila de uma dada prioridade
public void insereFilaPrior(String nomex,String servicox,int priorx)
  {Pessoa p = new Pessoa(nomex,servicox);
        NoFila t = new NoFila(p,priorx);
        if (!v[priorx].filaVazia())
        { v[priorx].setInicio(t) ;
          v[priorx].setFim(t) ; }
    else { v[priorx].getFim().setProx(t) ;
           v[priorx].setFim(t) ; }
        }

Como fazer agora para a impressao !?

21 Respostas

felipealbuquerque

Faz um for para passar pelos elementos da fila e imprime. Exemplo de iteração em array:

String[] array = new String[3];

array[0] = "Elemento 1";
array[1] = "Elemento 2";
array[2] = "Elemento 3";

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]); // imprime o elemento do array no console
}
Marky.Vasconcelos
for(Fila f : v){
System.out.println(f);//Caso tenho sobreescrito toString na classe Fila
}
for(Fila f : v){
System.out.println(f.getAlgo() +" "+f.getResto());
}

A opção mais façil é sobreescrever toString na classe Fila, vai ser algo assim

public class Fila{
private String nomex;
private int prio;
@Override
public String toString(){
 return "Pessoa: "+nomex+" com prioridade:"+prio;
}
}

Dessa maneira você pode passar o objeto como parametro em um println e não vai ver algo como File@f15

P

Outra forma de usar o for seria usando o chamado “for especial”, ou em outras linguagens “foreach” …(Lembrando q isso so funciona no Java 5.0)

String[] array = new String[]{"Elemento 1", "Elemento 2", "Elemento 3"};  
		 		      
for (String ar : array) {  
   System.out.println(ar); 
}

[]'s

Gabriel_Davi

Nao consegui :shock:

É o seguinte…estão armazenadas 4 FILAS…uma em cada posicao do vetor…
Eu quero imprimir uma determinada fila( ela vem na chamada do metodo)
Imprimir o nome e o serviço…que sao os atributos de pessoa…que ta dentro de cada Nó…
Entederam !?

Tipo esse assim:

// Metodo que imprime as pessoas da fila public void imprimeFila() { NoFila t = inicio; while(t!=null) { Pessoa p = t.getInfo(); System.out.println("Nome: "+p.getNome()); System.out.println("CPF: "+p.getCPF()); System.out.println("Telefone: "+p.getTelefone()); t = t.getProx(); } }

Gabriel_Davi

O meu atual ta assim

public void imprimeFilaPrior(int priorx) { NoFila t = inicio; while(t!=null) { Pessoa p = t.getInfo(); System.out.println("Nome: "+v[priorx].getNome()); System.out.println("Serviço: "+v[priorx].getServico()); t = t.getProx(); } }

aparecendo os eguinte erro

cannot find symbol - variable inicio.

mas ela foi declarada na classe Fila

Marky.Vasconcelos

A variavel inicio está na classe Fila mas o método imprimeFilaPrior está na classe File?
Se não o compilador não sabe daonde vem essa variavel porque nessa classe ela não foi instanciada.

Gabriel_Davi

Imprime Fila Prior ta na classe Fila de prioridade

Entao eu devo colocar o ImprimeFila Prioridade na classe fila !?

Marky.Vasconcelos

Não mas quando usar

NoFila t = inicio;

Use a variavel de file

NoFila t = algumaFila.inicio;
Gabriel_Davi

No caso então eu teria que usar o vetor ne onde esta armazenado as filas !?

Tipo:

NoFila t = v[priorx].inicio

!?

Eu fiz assim mas diz que não tenho acesso

Desculpa a burrice [:P]

Marky.Vasconcelos

Então inicio deve ser privado certo?
Crie um Getter pra ele e acesse

NoFile t = v[priorx].getInicio();
Gabriel_Davi

Ahhhn essa parte compilou valeu =D

aki o código como ta agora

public void imprimeFilaPrior(int priorx) { NoFila t = v[priorx].getInicio(); while(t!=null) { Pessoa p = t.getInfo(); System.out.println("Nome: "+v[priorx].getNome()); System.out.println("Serviço: "+v[priorx].getServico()); t = t.getProx(); } }

Diz ki nao ta achando o metodo getNome…mais ta aki ¬¬

O que mais tem de errado !?
ja to tomando tempo dmais de vc

Marky.Vasconcelos
public void imprimeFilaPrior(int priorx)   
  { NoFila t = v[priorx].getInicio();   
    while(t!=null)   
    { Pessoa p = t.getInfo();   
      System.out.println("Nome: "+p.getNome());   
       System.out.println("Serviço: "+p.getServico());   
      t = t.getProx(); }   
  }

Usa os métodas da Pessoa ali você ta usando a fila denovo

EDIT: Porque eu fico escrevendo file invés de fila?

Gabriel_Davi

RESOLVIDO

Bom gente dpois da ajuda de voces e algumas consultas na faculdade meu imprime ficou o seguinte:

//Classe Fila

// Metodo que imprime uma fila
      public void imprimeFila()
      {NoFila t = inicio;
       Pessoa p = null;
    while(t!=fim)
     { p = t.getInfo();     
       System.out.println("Nome: "+p.getNome());     
        System.out.println("Serviço:"+p.getCPF());     
      t = t.getProx(); }
       System.out.println("Nome:"+p.getNome());     
        System.out.println("Serviço:"+p.getCPF());  
   }
Uso a classe fila de prioridade pra imprimir determinada fila
public void imprimeFilaPrior(int priorx)     
   { v[priorx].imprimeFila();}

Só que ta com um problema...
Ele só imprime se for inserido mais de uma pessoa ¬¬...inserindo uma somente, ele não imprime ¬¬
Ela imprime sempre a PRIMEIRA PESSOA...e repetido...
por exemplo..

se eu insiro 3 pessoas, ele imprime so as duas primeiras...
Ou seja..ele nunca imprime a ULTIMA...

Gabriel_Davi

Bom consegui imprimir a fila de cada prioridade…mas agora gostaria de imprimir a fila F…a fila toda…
Como faço isso !?
vou colar aki os atributos das classes

public class FilaDePrioridade { private Fila v[]=new Fila [4]; private NoFila f; public FilaDePrioridade()

public class Fila public class Fila { private NoFila inicio; private NoFila fim; private int cont;

public class NoFila public class NoFila { private Pessoa info; private int prior; private NoFila prox;

Marky.Vasconcelos

Qual é a fila toda?
é o atributo v da classe FilaDePrioridade?

Gabriel_Davi

Acho que sim ne…
Pois cada fila está em uma posicao do vetor…
Entao a fila toda seria todo o vetor ne…

Marky.Vasconcelos

Ué eu não sei, o programa é seu não entendi direito suas classes^^ mas se for o vetor faça assim:

for(Fila fila : v)
fila.imprimeFila();
Gabriel_Davi

Da erro :cry:

java.lang.NullPointerException

at Fila.imprimeFila(Fila.java:72)

at FilaDePrioridade.imprimeFilaF1(FilaDePrioridade.java:49)

Aki o imprimefila

// Metodo que imprime uma fila public void imprimeFila() {NoFila t = inicio; while(t!=fim) { Pessoa p = t.getInfo(); System.out.println("Nome: "+p.getNome()); System.out.println("Serviço:"+p.getCPF()); t = t.getProx(); } if(t==fim) {Pessoa p2 = t.getInfo(); System.out.println("Nome:"+p2.getNome()); System.out.println("Serviço:"+p2.getCPF()); } }

Marky.Vasconcelos

Se você tiver algum objeto null em algum lugar vai lançar isso.

Faça testes antes de imprimir

public void imprimeFila() 
     {
if(inicio == null) return;//Já para o método aqui se for null
NoFila t = inicio;   
   while(t!=fim) 
    { 
       if(t.getInfo() == null)t = t.getProx();//Já vai pro proxima pessoa se for null
       Pessoa p = t.getInfo();       
      System.out.println("Nome: "+p.getNome());       
       System.out.println("Serviço:"+p.getCPF());       
     t = t.getProx(); }   
     if(t==fim)   
     {Pessoa p2 = t.getInfo();   
     System.out.println("Nome:"+p2.getNome());       
       System.out.println("Serviço:"+p2.getCPF());   
   }
Gabriel_Davi

Deu certo \o//////////////////////////

noss muito obrigado…valeu mesmo hehehehe =DDDDD

daki a poco venho aki d novo tirar duvidas com o remove

huahuahua

valeeeu \o//

Gabriel_Davi

Problema d novo ¬¬
na impressão da fila total…

Ele sempre imprime 4 mensagens de que não há pessoas na fila… mesmo se houver…
Se houver ele fica revezando.

Imprime a pessoa, imprime mensagem de erro, imprime pessoa, imprime mensagem de erro…

Criado 3 de dezembro de 2007
Ultima resposta 6 de dez. de 2007
Respostas 21
Participantes 4