Olá pessoal!
Esse é o meu primeiro tópico!! Já peço desculpas desde já por algo mal escrito ou fora dos padrões do fórum.
Bom, vamos à minha dúvida…
Estou trabalhando com duas classes em dois arquivos diferentes. Na classe TempoMostra está o meu main e é onde eu peço para o usuário digitar uma hora, min e segundos.
A outra classe chama-se Tempo e pega esses valores digitados.
Porém, estou com problemas no setSeg que está na classe Tempo, pois quero fazer uma verificação dos segundos digitados pelo usuário. Caso, ele digite um número maior que 59, eu pego o resto da divisão do número digitado por 60 e faço desse valor os meus segundos. E, o valor da divisão normal eu passo pros minutos, mas isso eu vejo depois.
Eu consegui fazer a verificação total e funcional mas utilizando um construtor na classe Tempo, mas queria usar o setSeg.
Aí vão os códigos:
classe TempoMostra (onde está o main):
Tempo novoTempo = new Tempo();
case 1:
iHora = Integer.parseInt(JOptionPane.showInputDialog("Digite uma hora"));
iMin = Integer.parseInt(JOptionPane.showInputDialog("Digite um minuto"));
iSeg = Integer.parseInt(JOptionPane.showInputDialog("Digite um segundo"));
novoTempo.setHora(iHora);
novoTempo.setMin(iMin);
novoTempo.setSeg(iSeg);
break;
classe Tempo (onde estão os meus setters e getters):
public void setSeg(int seg)
{
if (seg > 59)
{
novoSeg = seg % 60;
this.seg = novoSeg;
}
else
{
this.seg = seg;
}
}
Qdo utilizo esse setSeg, a verificação não funciona… mas qdo faço a verificação num construtor Tempo (3 parametros aqui), a coisa funciona.
Alguém tem idéia pq esse setSeg não está funcionando??
Abraços a todos!!
André
olá seja bem vindo…
O que u eposso te dizer é que escrever lógica dentro do Set e do Get é errado. eles servem apenas pra encapsular seu satributos provate.
Se precisa realizar cálculos crie um método para calcular com base nos atributos recebidos…capiche ???
[quote=Giulliano]olá seja bem vindo…
O que u eposso te dizer é que escrever lógica dentro do Set e do Get é errado. eles servem apenas pra encapsular seu satributos provate.
Se precisa realizar cálculos crie um método para calcular com base nos atributos recebidos…capiche ???[/quote]
Olá Giulliano!!
Obrigado pelua ajuda, mas deixa eu te perguntar mais uma coisa. Realizar cálculos dentro de construtores é errado ou eu posso fazer?
Abraços!
Exemplo Prático…
public class Tempo {
private Integer horas;
private Integer minutos;
private Integer segundos;
//Construtor Padrão
public Tempo() {
}
//Construtor com argumentos
public Tempo(Integer horas,Integer minutos, Integer segundos){
this.horas = horas;
this.minutos = minutos;
this.segundos = segundos;
}
public Double calculoHoras(Integer horas,Integer minutos, Integer segundos){
//TODO aqui vem os calculos
return null;
}
//Getters and Setters
}
na minha opnião é certo se a sua classe tem esse escopo de vida.
Ou seja, um objeto segundo a OO deve ser construido com estado e responsabilidades.
[quote=Giulliano]Exemplo Prático…
[code]
public class Tempo {
private Integer horas;
private Integer minutos;
private Integer segundos;
//Construtor Padrão
public Tempo() {
}
//Construtor com argumentos
public Tempo(Integer horas,Integer minutos, Integer segundos){
this.horas = horas;
this.minutos = minutos;
this.segundos = segundos;
}
public Double calculoHoras(Integer horas,Integer minutos, Integer segundos){
//TODO aqui vem os calculos
return null;
}
//Getters and Setters
}
[/code][/quote]
Última pergunta, prometo!
Qdo vc faz esses cálculos pelo “public Double calculoHoras”, o set automaticamente atualiza o valor do atributo?
Abraços e obrigado mais uma vez!!
cara pode perguntar a vontade…rss
o valor do set é atualizado SE vc fizer this.horas = resultado;
onde vc esta dizendo que o atributo horas da instancia atual que vc esta usando é igual a um valor. por isso o construtor com argumentos faz aquelas três referências…
[quote=Giulliano]cara pode perguntar a vontade…rss
o valor do set é atualizado SE vc fizer this.horas = resultado;
onde vc esta dizendo que o atributo horas da instancia atual que vc esta usando é igual a um valor. por isso o construtor com argumentos faz aquelas três referências…[/quote]
Opa Giulliano! Entendi o que vc quis dizer!
Mas, na verdade, tá ocorrendo alguma coisa errada pq parece que o meu set não tá pegando valor nenhum.
Abaixo, to colocando só um dos case (são 4 ao todo). Olha só:
public classe TempoMostra
case 1:
iHora = Integer.parseInt(JOptionPane.showInputDialog("Digite uma hora"));
iMin = Integer.parseInt(JOptionPane.showInputDialog("Digite um minuto"));
iSeg = Integer.parseInt(JOptionPane.showInputDialog("Digite um segundo"));
Tempo novoTempo = new Tempo(iHora, iMin, iSeg);
break;
public class Tempo
private int hora, min, seg;
Tempo (int horaTempo, int minTempo, int segTempo)
{
this.hora = horaTempo;
this.min = minTempo;
this.seg = segTempo;
}
public void setSeg(int seg)
{
this.seg = 0;
}
Acima, eu coloquei no meu setSeg pro valor q eu digitar pros segundos (digitados na classe TempoMostra) ficasse igual a 0. Só que ele mostra os valores que eu digitei normal.
Por exemplo, se digitei: 24 para hora; 30 pros min; 45 pros segundos, ele irá continuará me mostrando isso, ao invés dos segundos ficassem igual a 0.
Parece q o meu setSeg nem está sendo lido!!
Abraços e obrigado mais uma vez!!
André
seu setSeg será lido se vc o chamar…a menos q o faça ele realemte não é executado.
O que vc deveria fazer na verdade é
public void setSeg(int seg){
this.seg = seg;
}
agora vc esta dizendo que seu seg deve ser igual ao parametro recebido. Como vc esta pasando os valores no construtor ele assume sempre aqueles valores. o que vc pode fazer nesse caso é chamar o set passando um valor 0 ou atribuir no contrutor o valor zero por seg.
O que tem de errado em colocar lógica dentro dos métodos acessores? O encapsulamento foi feito justamente para que se possa alterar a lógica sem alterar a interface e quebrar outras classes que chamam o objeto.
Se bem que fazer acessores p/ cada atributo seria uma das ultimas coisas a considerar, mas isso são outros 500.