Como usar o Contains()? [RESOLVIDO]

10 respostas
B

Quero add um elemento no ArrayList ensalamento, porém, ele precisa preencher alguns pre-requisitos…

boolean alocar(Turma turma, Sala sala) {
	TurmaEmSala enSala = new TurmaEmSala();
	
	if(!ensalamento.contains(Turma)){			
		if(turma.numAlunos > sala.capacidade){
			return false;
		}else if(turma.acessivel == sala.acessivel){
			ensalamento.add(enSala);
			return true;
		}		
	}

Acontece que a verificação - if(!ensalamento.contains(Turma)) - não está funcionando… acredito que eu esteja fazendo algo errado… alguém pode me ajudar?

10 Respostas

Mateus_Malaquias1

Você postou todo o trecho do método alocar?

Pelo que deu pra ver pela assinatura do método:
boolean alocar(Turma turma, Sala sala) { //FAZ COISAS AQUI }

Você deveria está verificando o objeto turma com T minusculo e não maiúsculo, ficando assim:
if(!ensalamento.contains(turma)){ if(turma.numAlunos > sala.capacidade){ return false; }else if(turma.acessivel == sala.acessivel){ ensalamento.add(enSala); return true; } }

Explicando o .contains():
Ele serve para você verificar se na sua Collection (o teu ArrayList) possui um determinado elemento, então você deveria esta passando para ele teu objeto turma e não a classe Turma.

B

Na verdade, errei na hora de passar pra cá, o trecho correto é assim:

boolean alocar(Turma turma, Sala sala) {
TurmaEmSala enSala = new TurmaEmSala();

if(!ensalamento.contains(turma)){			
		if(turma.numAlunos > sala.capacidade){
			return false;
		}else if(turma.acessivel == sala.acessivel){
			ensalamento.add(enSala);
			return true;
		}		
	}
	
return false;
}

Mesmo quando já tem a turma ele add do mesmo jeito…

Sim, esse é o trecho completo do método alocar sim…

Mateus_Malaquias1

Me tira uma dúvida.
Turma deve ser uma entidade ou um Pojo ai nesse teu código. Você lembrou de sobrescrever os métodos hashCode() e equals() de Turma?

B

Vou postar tudo aqui pra ficar melhor a visualização:

public class Ensalamento {

ArrayList<Sala> salas = new ArrayList<Sala>();
ArrayList<Turma> turmas = new ArrayList<Turma>();
ArrayList<TurmaEmSala> ensalamento = new ArrayList<TurmaEmSala>();

public Ensalamento() {
}

/**
 * @param salas
 * @param turmas
 * @param ensalamento
 */
public Ensalamento(ArrayList<Sala> salas, ArrayList<Turma> turmas, ArrayList<TurmaEmSala> ensalamento) {
	this.salas = salas;
	this.turmas = turmas;
	this.ensalamento = ensalamento;
}


void addSala(Sala sala){
	salas.add(sala);
}

void addTurma(Turma turma){
	turmas.add(turma);
}

Sala getSala(Turma turma){
	Sala retorno = null;
	if(ensalamento.contains(turma)){
		retorno = ensalamento.get(ensalamento.indexOf(turma)).sala;
	}
 	return retorno;
}

boolean salaDisponivel(Sala sala, int horario){
	return true;
}

boolean salaDisponivel(){
	
	return true;
}

boolean alocar(Turma turma, Sala sala) {
	TurmaEmSala enSala = new TurmaEmSala();
	
	if(!ensalamento.contains(turma)){			
		if(turma.numAlunos > sala.capacidade){
			return false;
		}else if(turma.acessivel == sala.acessivel){
			ensalamento.add(enSala);
			return true;
		}		
	}
	
return false;
}

}

public class TurmaEmSala {

Turma turma;
Sala sala;

public TurmaEmSala() {
}

/**
 * @param turma
 * @param sala
 */
public TurmaEmSala(Turma turma, Sala sala) {
	this.turma = turma;
	this.sala = sala;
}

}

public class Sala {

/**
 * @param args
 */
int bloco;
int sala;
int capacidade;
boolean acessivel;

public Sala() {
    super();
}

/**
 * @param bloco
 * @param sala
 * @param capacidade
 * @param acessivel
 */
public Sala(int bloco, int sala, int capacidade, boolean acessivel) {
    super();
    this.bloco = bloco;
    this.sala = sala;
    this.capacidade = capacidade;
    this.acessivel = acessivel;

}

String getDescricao() {
    return "Bloco " + this.bloco + ", Sala " + this.sala + " (" + this.capacidade + " lugares, "
            + (this.acessivel ? "acessível" : "não acessível") + ")";

}

}

public class Turma {

String nome;
String professor;
int numAlunos;
boolean acessivel;
String[][] turma = { 
		{"segunda ","terça ","quarta ","quinta ","sexta "},
		{"8hs","10hs","12hs","14hs","16hs","18hs","20hs"}
};

ArrayList<Integer> horarios = new ArrayList<Integer>();

public Turma() {
	super();
}

/**
 * @param nome
 * @param professor
 * @param numAlunos
 * @param acessivel
 */
public Turma(String nome, String professor, int numAlunos, boolean acessivel) {
	this.nome = nome;
	this.professor = professor;
	this.numAlunos = numAlunos;
	this.acessivel = acessivel;
}

void addHorario(int i) {
 
	 horarios.add(i);
}

String getHorariosString() {
 	
	String retorno= "";
	int i;
	
	Iterator<Integer> horario = horarios.iterator();
	
	while(horario.hasNext()){
		
		i= horario.next().intValue();
		retorno += turma[0][i/7]+turma[1][(i%7)-1];
		

		if(horario.hasNext()){
			retorno+=", ";
		}
	}
	
	return retorno;
}

String getDescricao() {
    return "Turma: " + this.nome + "\nProfessor: " + this.professor + "\nNúmero de Alunos: " 
    		+ this.numAlunos + "\nHorário: " + getHorariosString() + "\nAcessível: "
            + (this.acessivel ? "sim" : "não");
}

}

Acho que assim fica melhor de identificar onde está meu erro…:sweat_smile:

Mateus_Malaquias1

Adiciona o código abaixo na classe TurmaEmSala e testa, não tenho como rodar aqui.

@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((turma == null) ? 0 : turma.hashCode()); return result; }

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	TurmaEmSala other = (TurmaEmSala) obj;
	if (turma == null) {
		if (other.turma != null)
			return false;
	} else if (!turma.equals(other.turma))
		return false;
	return true;
}
B

Assim?

public class TurmaEmSala {

Turma turma;
Sala sala;

public TurmaEmSala() {
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((turma == null) ? 0 : turma.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	TurmaEmSala other = (TurmaEmSala) obj;
	if (turma == null) {
		if (other.turma != null)
			return false;
	} else if (!turma.equals(other.turma))
		return false;
	return true;
}
/**
 * @param turma
 * @param sala
 */
public TurmaEmSala(Turma turma, Sala sala) {
	this.turma = turma;
	this.sala = sala;
}

}

Continua da mesma forma…

Mateus_Malaquias1

É bom deixar eles sempre no final da classe ou depois dos construtores pra não atrapalhar a leitura da tua classe. Mas testa ai e me diz se funcionou.

Se não funcionar me manda tua classe que ta executando o Main pra eu testar aqui antes de postar uma nova resposta.

B

Beleza, já coloquei no fim da classe, mas ainda está da mesma forma…

Vou enviar a main…

public class EnsalamentoMain {

/**
 * @param args
 */
public static void main(String[] args) {
	
	Sala um = new Sala();
	um.bloco=6;
	um.sala=101;
	um.capacidade=70;
	um.acessivel=false;
	
	Sala dois = new Sala();
	dois.bloco=6;
	dois.sala=102;
	dois.capacidade=60;
	dois.acessivel=false;
	
	Sala tres = new Sala();
	tres.bloco=6;
	tres.sala=201;
	tres.capacidade=70;
	tres.acessivel=true;
		
	Turma aed1 = new Turma();
	aed1.nome = "Algoritmos e Estrutura de Dados I";
	aed1.professor = "Edleno Silva";
	aed1.numAlunos = 60;
	aed1.acessivel=false;
	aed1.addHorario(2);
	aed1.addHorario(16);
	aed1.addHorario(30);
	
	Turma tp = new Turma();
	tp.nome = "Técnicas de Programação";
	tp.professor = "Horácio Fernandes";
	tp.numAlunos = 50;
	tp.acessivel=true;
	tp.addHorario(11);
	tp.addHorario(25);
	tp.addHorario(32);
	
	Turma lpc = new Turma();
	lpc.nome = "Laboratório de Programação C";
	lpc.professor = "Edson Nascimento";
	lpc.numAlunos = 10;
	lpc.acessivel=true;
	lpc.addHorario(1);
	lpc.addHorario(15);
	lpc.addHorario(29);
		
	Turma rc = new Turma();
	rc.nome = "Redes de Computadores";
	rc.professor = "Edjair Souza";
	rc.numAlunos = 70;
	rc.acessivel=true;
	rc.addHorario(2);
	rc.addHorario(16);
	
	//System.out.println(aed1.getDescricao()+"\n\n"+tp.getDescricao()+"\n\n"+lpc.getDescricao()+"\n\n"+rc.getDescricao());
	
	Ensalamento en = new Ensalamento();
	en.addSala(um);
	en.addTurma(lpc);
	en.addSala(dois);
	en.addTurma(tp);
	en.addSala(tres);
	en.addTurma(aed1);
	en.alocar(lpc, tres);
	en.alocar(aed1, um);
	en.alocar(lpc, tres);
	en.alocar(lpc, tres);
	en.alocar(aed1, um);
	
	
	System.out.println (en.getTotalTurmasAlocadas());

}

}

B

coloquei o getTotalTurmasAlocadas() retornando o tamanho do arraylist pra ver se ele estava add todos, até mesmo os repetidos…

Mateus_Malaquias1

Man no teu MAIN vc não passa nenhuma lista TurmaEmSala pro objeto en, logo quando vc executar o método alocar a collection ensolamento lá dentro vai estar NULL então vai sempre executar.

Pra funcionar dessa maneira que vc fez sua classe teste, você deve trocar ensolamento por turmas.

`boolean alocar(Turma turma, Sala sala) {
TurmaEmSala enSala = new TurmaEmSala();

if(!turmas.contains(turma)){			
		if(turma.numAlunos > sala.capacidade){
			return false;
		}else if(turma.acessivel == sala.acessivel){
			ensalamento.add(enSala);
			return true;
		}		
	}
	
return false;
}`
Criado 29 de junho de 2016
Ultima resposta 29 de jun. de 2016
Respostas 10
Participantes 2