Jump to content
bloodspader

Problema com alguns métodos/construtores das classes

Recommended Posts

bloodspader

Boa noite, sou iniciante em java e estou a tentar desenvolver um trabalho que consiste na elaboração de uma companhia de comboios, mas estou com alguns problemas na implementação de alguns métodos...

Tem as seguintes classes principais:

Estacao.java

public class Estacao {

private int idx;

Vector <Horario> oHorario = new Vector <Horario>();

private Paragem aParagem;

public Estacao(int id){
	idx = id;
}
/**
 * devolve o identificador da estação
 * @return o identificador da estação
 */
public int getId() {
	return idx;
}

/**
 * Altera o identificador da estação
 * @param id o novo identificador da estação
 */
public void setId(int id) {
	idx = id;
}

/** 
 * adiciona este horário à estação
 * @param h o horário a adicionar
 */
public void addHorario( Horario h ){
	oHorario.add(h);
}

/**
 * remove o horário da estação
 * @param h o horário a remover da estação
 */
public void removeHorario( Horario h){
	oHorario.remove(h);
}

/**
 * Devolve todos os horários desta estação
 * @return todos os horários desta estação
 */
public Horario[] getHorarios(){
	Horario h[] = new Horario[oHorario.size()];
	for (int i=0;i<h.length;i++){
		h[i]= aParagem.getHorario();
	}
	return h;
}		

public String toString(){
	return "e["+idx+"]";
}	
}  

Horario.java

 public class Horario {

Vector <Paragem> aParagem = new Vector <Paragem>();

public Horario(){
}

/**
 * Devolve a estação em que se inicia a marcha
 * @return a estação em que se inicia a marcha
 */
public Paragem getOrigem(){
	return aParagem.firstElement();
}

/**
 * Devolve a estação terminal
 * @return a estação terminal
 */
public Paragem getFinal(){
	return aParagem.lastElement();
}

/**
 * Adiciona uma paragem ao horário. A paragem tem de ser inserida 
 * no local certo, isto é, garantir que fica ordenada de acordo com a hora de entrada  
 * @param p a paragem a adicionar
 */
public void addParagem( Paragem p ){
	// inserir no sitio certo
		aParagem.add(p);
}

/**
 * Remove uma paragem do horário
 * @param p paragem a remover do horário
 */
public void removeParagem( Paragem p ){
	aParagem.remove(p);

}	

/**
 * Remove a paragem na estação dada pelo identificdor
 * @param id identificador da estação de onde remover a paragem 
 */
public void removeParagemEstacao( int id ){
	aParagem.remove(id);
}

/**
 * Devolve a paragem que efectua na estação indicada
 * @param id identificador da estação
 * @return a paragem que efectua na estação indicada, null se não parar nela
 */
public Paragem getParagemEstacao(int id) {
	return aParagem.get(id);

}

/**
 * Devolve as estações por onde passa pela ordem de itinerário
 * @return as estações por onde passa pela ordem de itinerário
 */
public Estacao[] getItinerario(){
	Estacao e[] = new Estacao [10];
	Paragem p = new Paragem ();
	for (int i=0;i<e.length;i++){
		 e[i] = p.getEstacao(); 
	}
	return e;
}
}

Paragem.java

 public class Paragem {

private Estacao aEstacao;

private Hora entrada, saida;

private Horario oHorario;

public Paragem(){
}

public Paragem (Estacao e , Hora entrada, Hora saida ){
	aEstacao = e;
	this.entrada = entrada;
	this.saida = saida;
}
/**
 * devolve a estação em que se efetua a paragem
 * @return a estação em que se efetua a paragem
 */

public Estacao getEstacao() {
	return aEstacao;
}

/**
 * altera a estação em que efetua a paragem
 * @param estacao a nova estação
 */
public void setEstacao(Estacao estacao) {
	aEstacao = estacao;
}

/**
 * retorna a hora de entrada na estação
 * @return a hora de entrada na estação
 */
public Hora getEntrada() {
	return this.entrada;
}

/**
 * altera a hora de entrada na estação
 * @param entrada a nova hora de entrada na estação
 */
public void setEntrada(Hora entrada) {
	this.entrada = entrada;
}

/**
 * retorna a hora de saída da estação
 * @return a hora de saída da estação
 */
public Hora getSaida() {
	return saida;
}

/**
 * altera a hora de saída da estação
 * @param entrada a nova hora de saída da estação
 */
public void setSaida(Hora saida) {
	this.saida = saida;
}

/**
 * Devolve o horário a que pertence esta paragem
 * @return o horário a que pertence esta paragem
 */
public Horario getHorario() {
	return oHorario;
}

/**
 * Altera o horário a que pertence esta paragem
 * @param h o novo horário desta paragem
 */
public void setHorario( Horario h ) {
	oHorario = h;
}

/**
 * compara duas paragens em termos da hora de entrada
 * @param p a paragem com que comparar
 * @return <0 se for menor, 0 se forem iguais, >0 se for maior
 */
public int compareTo( Paragem p ){
	int difHora = entrada.compareTo(p.entrada);
	if (this.compareTo(p)<0){
		return -difHora; 		//Se for menor vai devolver a comparacao entre as horas 
	}else if (this.compareTo(p)>0){
		return difHora;
	}else{
		return difHora;
	}
}

public String toString(){
	return (aEstacao+"  entrada["+entrada+"]"+"  saida["+saida+"]\n"); 
}	
} 

Companhia.java

public class Companhia {

private int idx;

Map <Integer,Estacao> aEstacao = new HashMap <Integer,Estacao>();

Vector <Horario> oHorario = new Vector <Horario>();


         public void addEstacao( Estacao e ){
	aEstacao.put(idx, e);
}

public Estacao getEstacao( int id ){
	return aEstacao.get(id);
}

public void removeEstacao( Estacao e ){
	aEstacao.remove(e);
}	

public Estacao[] getEstacoes(){
	Estacao e[]= new Estacao [aEstacao.size()];
	for (int i=0;i<aEstacao.size();i++){
		e[i]= aEstacao.get(i);
	}
	return e;
}

public void addHorario( Horario h){
	oHorario.add(h);
}

public void removeHorario( Horario h ){
	oHorario.remove(h);
}

}

O problema reside no facto de na classe Horario.java, no construtor getOrigem(), getFinal() e no método getItinerário() (percurso de um comboio)  não conseguir passar os valores, retorna sempre NullPointerException.

Não estou a ver o que possa estar a fazer mal. Se alguém me puder ajudinha, agradecia.

Obrigado e Cumprimentos.

Share this post


Link to post
Share on other sites
josevellozo

boa noite.

Eu sugeria a utilização de uma lista ligada em detrimento do Vector. O facto de devolver null pointer exception significa que o elemento contido naquela posição é null. alem de tudo mais, o metodo add adiciona os elementos no fim do vector... de qualquer das formas aconselho a pelo menos ver a api da classe Vector:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Vector.html

Share this post


Link to post
Share on other sites
brunoais
de qualquer das formas aconselho a pelo menos ver a api da classe Vector:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Vector.html

A documentação para java 6: http://download.oracle.com/javase/6/docs/api/java/util/Vector.html

A do java 1.4 já é demasiado velha. Usa-a só se estiveres a programar em java 1.4


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
bloodspader

Boa Noite, estou com um pequeno problema em dois construtores de diferentes classes que não consigo passar os valores...no construtor public Paragem[] getParagensApos (int id) na classe Horario para depois tentar ir buscar essas mesmas paragens na class estacao com o construtor public Paragem getProximaEntrada( Hora h ) e assim conseguir devolver todas as paragens apos determinada hora. Nao sei o que poderei estar a fazer mal, porque mais uma vez me devolve null...

public Paragem[] getParagensApos(int id){
	Paragem  pApos [] = new Paragem [aParagem.size()];   
	for (int i=0;i<aParagem.size();i++){
		Paragem p = aParagem.get(i);
		if (p.getEntrada().compareTo(aParagem.elementAt(0).getEntrada())>0){
			pApos [i] = p;
		}
	}
	return pApos;
}

public Paragem getProximaEntrada( Hora h ){
	Paragem pAux [] = oHorario.elementAt(idx).getParagensApos(idx);
	if (pAux.length==0){
		return null;
	}
	Paragem prox = pAux[0];
	for (int i=1;i<pAux.length;i++){
		Paragem p = pAux[i];
		System.out.println("p: "+p.getEstacao().getId()+ "prox:"+prox.getEntrada());
		if(prox.getEntrada().compareTo(p.getEntrada())>0)
			prox = p;	
	}
	return prox;


}

Alguém me pode dar uma ajudinha?

Obrigado e Cumprimentos

Share this post


Link to post
Share on other sites
KTachyon

Existe uma diferença entre construtor e método. O que tens aí é tudo menos construtores ;)


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
bloodspader

ja consegui resolver o problema..dos metodos...mas na mesma obrigado.

Share this post


Link to post
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

×
×
  • 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.