Duvida orientacao,arraylist,método

7 respostas
amanda_baumgratz

oi boa tarde, to com duvidas sobre isso aqui… eu tenho uma lista de pessoas chamada Lista, cada um so pode comer 2 fatias de bolo por dia,(o evento de comer eh feito atras de um click em um jlabel) na 3 fatia fala q ele n pode mais comer.No dia seguinte reseta tudo e comeca tudo denovo. como eu faco isso? tipo eu pensei… em fazer um for each( pra percorrer a lista) e pegar a pessoa que quer comer o bolo e atribuir o valor 1 a tipo o atributo ‘comer’ da pessoa, da proxima vez q ela kiser comer aih incrementa 1 ao atributo denovo, eu posso fazer assim ou a minha logica ta errada? me desculpem to no comeco de orientacao a objetos ainda e listas. boa tarde.

7 Respostas

M

Uau! Boa tarde!
Sua lógica está boa, uma lista de pessoas. Cada pessoa guarda a quantidade de fatias de bolo comidas.
Coloca o código aqui.
E me convida pra comer o bolo!

Boa sorte!

marcelo.bellissimo

Dica pros novos usuários: coloquem uma foto bem bonita e um nome feminino que suas dúvidas sempre serão respondidas…

Agora, sério… tá boa a lógica… voce criou uma classe Pessoa, eu suponho… e um atributo para marcar quantas fatias o guloso comeu… corretíssimo… se for só pra testar a lógica, até aí está tudo bem, voce pode percorrer a lista, achar a pessoa, e incrementar o atributo, e fazer as outras verificações e etc…

Agora, se quiser desempenho pra uma lista beeeem maior de pessoas, essa maneira vai te dar alguns problemas… existem maneiras de aumentar o desempenho da busca pela pessoa desejada… não vou entrar em detalhes para não te confundir, mas se precisar, podemos dar várias opções…

amanda_baumgratz

obrigado ms pereira e marcelo, entao, eu fiz a classe pessoa,fiz o cadastro de pessoas tbm. Entao marcelo, nao precisa buscar a pessoa,pelo menos acho, porque ela tem q logar no sistema e comer o bolo a pessoa q loga eh a pessoa q come, obrigado pela ajuda, mas o meu problema eh a pratica, vou por o trecho do codigo aqui, pera

amanda_baumgratz
import java.util.Calendar;
import java.util.Scanner;
import java.util.GregorianCalendar;

public class Bolo {

    Scanner sc = new Scanner(System.in);
    GregorianCalendar gc = new GregorianCalendar();

    double hora1fatia;
    double hora2fatia;
    public Bolo() {
	
    }


    public void comerBolo() {
	System.out.println("Digite sua matrícula: ");
	int m = sc.nextInt();
	System.out.println("Digite sua senha: ");
	String s = sc.next();

	for (Pessoa p : Lista) {
	    //Parte de Login
            if ((p.getMatricula() == m) && (p.getSenha().equals(s))) {
		if (Como faco pra pegar a pessoa q quer comer a fatia e verificar se ela n comeu nenhuma fatia?) {
		    System.out.println("Primeira fatia comida!");
		    p.setFatia(como faco pra incrementar 1 ao atributo fatia?);
		    hora1fatia = gc.get(Calendar.HOUR_OF_DAY)
			    + ((double) gc.get(Calendar.MINUTE) / 60);	    
		} else if (se ja tiver comido uma fatia){
		    System.out.println("Segunda fatia comida!");
		    p.setFatia(como faco pra incrementar 1 ao atributo fatia?);
		    hora2fatia = (gc.get(Calendar.HOUR_OF_DAY) + ((double) gc
			    .get(Calendar.MINUTE) / 60));
		}
	    } else {
		System.out.println("Senha ou matricula incorreta");

	    }

	}

    }

eh mais ou menos assim? nao sei mto a parte pratica. como eu faco pra pegar a pessoa q quer comer a fatia e verificar?

amanda_baumgratz

oi, fiz umas modificacoes, assim esta certo?

import java.util.Calendar;
import java.util.Scanner;
import java.util.GregorianCalendar;

public class Bolo {

    Scanner sc = new Scanner(System.in);
    GregorianCalendar gc = new GregorianCalendar();

    double hora1fatia;
    double hora2fatia;
    public Bolo() {
	
    }


    public void comerBolo() {
	System.out.println("Digite sua matrícula: ");
	int m = sc.nextInt();
	System.out.println("Digite sua senha: ");
	String s = sc.next();

	for (Pessoa p : Lista) {
	    //Parte de Login
            if ((p.getMatricula() == m) && (p.getSenha().equals(s))) {
		if (p.getFatia() == 0) {
		    System.out.println("Primeira fatia comida!");
		    p.setFatia(como faco pra incrementar 1 ao atributo fatia?);
		    hora1fatia = gc.get(Calendar.HOUR_OF_DAY)
			    + ((double) gc.get(Calendar.MINUTE) / 60);	    
		} else if (p.getFatia() == 1){
		    System.out.println("Segunda fatia comida!");
		    p.setFatia(como faco pra incrementar 1 ao atributo fatia?);
		    hora2fatia = (gc.get(Calendar.HOUR_OF_DAY) + ((double) gc
			    .get(Calendar.MINUTE) / 60));
		}else{
		    System.out.println("Voce nao pode mais comer fatias!");
	    } else {
		System.out.println("Senha ou matricula incorreta");

	    }

	}

    }

Ou não? obigado!

thiago.correa

A princípio parece estar certo sim, para incrementar o valor de uma fatia há duas maneiras,

1- no teu objeto Pessoa você pode criar um método que adiciona o número de fatias, algo assim

class Pessoa {
    private int fatias;
    public void adicionaFatia() {
        adicionaFatia(1);
    }
    public void adicionaFatia(int qtdeFatia) {
        fatias = fatias + qtdeFatia;
    }
}

ou se prefirir, na própria iteração do laço

int qtdeFatias = p.getFatia();
        if (qtdeFatias == 0) {   
            System.out.println("Primeira fatia comida!");   
            p.setFatia(qtdeFatias++);
marcelo.bellissimo

Testa isso:

Classe Bolo:
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Scanner;

public class Bolo {

	Scanner sc = new Scanner(System.in);
	GregorianCalendar gc = new GregorianCalendar();
	List<Pessoa> Lista = new ArrayList<Pessoa>();

	double hora1fatia;
	double hora2fatia;

	public Bolo() {
		// simulei algumas pessoas na lista
		for (int i = 0; i < 5; i++){
			Pessoa p = new Pessoa();
			p.setMatricula(i); // matricula com o numero do indice atual
			p.setSenha(String.valueOf(i)); // senha com o numero do indice atual
			Lista.add(p); // adiciona pessoa na lista
		}
		
		String comando = ""; // le o comando na tela
		do{
			comerBolo(); // chama o metodo
			System.out.println("Digite 'x' para sair.");
			System.out.println("ou digite qualquer outra coisa para continuar comendo!");
			comando = sc.next();
		}while(!comando.equals("x"));
		System.out.println("Bye, bye! o/");
	}

	public void comerBolo() {
		boolean loginSucesso = false;
		System.out.println("Digite sua matrícula: ");
		int m = sc.nextInt();
		System.out.println("Digite sua senha: ");
		String s = sc.next();

		for (Pessoa p : Lista) {
			// Parte de Login
			if (p.getMatricula() == m && p.getSenha().equals(s)) {
				// pessoa logada
				loginSucesso = true;
				if (p.getFatias() == 0) {
					System.out.println("Primeira fatia comida!");
					p.setFatias(1);
					hora1fatia = gc.get(Calendar.HOUR_OF_DAY) + ((double) gc.get(Calendar.MINUTE) / 60);
				} else if (p.getFatias() == 1) {
					System.out.println("Segunda fatia comida!");
					p.setFatias(2);
					hora2fatia = (gc.get(Calendar.HOUR_OF_DAY) + ((double) gc.get(Calendar.MINUTE) / 60));
				} else if (p.getFatias() == 2){
					System.out.println("Voce comeu demais !! Por hoje chega!");
				}
			}
		}
		
		if (!loginSucesso){
			// percorreu a lista toda, e nao encontrou a matricula/senha
			System.out.println("Senha ou matricula incorreta");
		}
	}
	
	public static void main(String[] args) {
		new Bolo();
	}
}
Classe Pessoa:
public class Pessoa {
	private int fatias;
	private int matricula;
	private String senha;
	// outros atributos
	
	public Pessoa(){
		this.fatias = 0; // inicializa o contador de fatias ao instanciar uma nova Pessoa
	}

	public void setFatias(int fatias) {
		this.fatias = fatias;
	}

	public int getFatias() {
		return fatias;
	}

	public int getMatricula() {
		return matricula;
	}

	public void setMatricula(int matricula) {
		this.matricula = matricula;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	// outros getters/setters
	
}
Criado 8 de abril de 2010
Ultima resposta 8 de abr. de 2010
Respostas 7
Participantes 4