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.
Duvida orientacao,arraylist,método
7 Respostas
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!
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…
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
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?
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!
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++);
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();
}
}
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
}