Jump to content
ole1990

Problema valores objecto

Recommended Posts

ole1990

Boa noite, tenho um problema a nivel dos valores do objecto tempo1 porque quero que fique com os valores introduzidos no inicio do programa e não os valores do resultado da conta. eu penço que o erro está na pongo G (fim da 2ª classe

Alguem me consegue exlpicar sff

Primeira classe

package ex_tempo;

import javax.swing.JOptionPane;


public class TesteTempo {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int dif_segun = 0, dif_segunextenco = 0;
        String maiormenor = "";
        Tempo tempo1;
        Tempo tempo2 = new Tempo(6, 6, 6);
        Tempo tempo3;

        tempo1 = Tempo.lerTempo();
        tempo3 = tempo1;
        tempo2.addsegundo(6, 6, 59);
        System.out.println(tempo1);
        System.out.println(tempo2);
        dif_segun = tempo1.differencasegundos(tempo2);
        System.out.println("A Differença é de :" + dif_segun + " segundos");
        maiormenor = tempo1.tempomaior(tempo2);
        System.out.println("O tempo " + tempo1 + maiormenor + tempo2);
        tempo3 = tempo1.differencaemtempo(tempo2);
        System.out.println(tempo3);
        System.out.println(tempo1.toformatoString());

        // TODO code application logic here
    }
}

2ª classe

package ex_tempo;

import javax.swing.JOptionPane;

public class Tempo {
    //Váriaveis de instancia
    private int hora;
    private int minutos;
    private int segundos;
//Contructores
    public Tempo() {
        hora = 0;
        minutos = 0;
        segundos = 0;
    }


    public Tempo(int horaa, int minutoss, int segundoss) {
        setTempo(horaa, minutoss, segundoss);
    }
    //metodos de class-----------------------------------------
//Ponto E
    public static Tempo lerTempo() {
        int hora = Integer.parseInt(JOptionPane.showInputDialog("Hora: "));
        int minutos = Integer.parseInt(JOptionPane.showInputDialog("Minutos: "));
        int segundos = Integer.parseInt(JOptionPane.showInputDialog("Segundos: "));
        return new Tempo(hora, minutos, segundos);
    }

    public void setTempo(int horaa, int minutoss, int segundoss) {
        hora = (horaa >= 0 && horaa <= 23) ? horaa : 0;//if em uma linha
        minutos = (minutoss >= 0 && minutoss <= 59) ? minutoss : 0;//if em uma linha
        segundos = (segundoss >= 0 && segundoss <= 23) ? segundoss : 0;//if em uma linha
    }
//ponto B
    public String toString() {
        String datams = "";
        datams += (hora >= 0 || hora <= 9) ? "0" + hora : hora;
        datams += (minutos >= 0 || minutos <= 9) ? "0" + minutos : minutos;
        datams += (segundos >= 0 || segundos <= 9) ? "0" + segundos : segundos;
        return datams;
    }
//Ponto C
    public int convertersegundos(int horaa, int minutoss, int segundoss){
        int segundostotal;
        segundostotal = (horaa * 3600) + (minutoss * 60) + segundoss;
        return segundostotal;
    }

    public void addsegundo(int horaa, int minutoss, int segundoss) {
        segundoss = convertersegundos(horaa, minutoss, segundoss);    
        segundoss = segundoss + 1;
        horaa = segundoss / 3600;
        segundoss = segundoss % 3600;
        minutoss = segundoss/60;
        segundoss = segundoss%60;
        this.hora = horaa;
        this.minutos = minutoss;
        this.segundos = segundoss;
    }
//Ponto D
    public int getHora() {
        return hora;
    }
    public int getMinutos(){
        return minutos;
    }
    public int getSegundos(){
        return segundos;
    }
    private int contasegundos(){
        int numsegundos = 0;
        numsegundos = hora*3600;
        numsegundos += minutos*60;
        numsegundos += segundos;
        return numsegundos;
    }
    public int differencasegundos(Tempo t1){
        int totaldif = 0, totaldif1 = 0;
        int segdiferenca = convertersegundos(hora, minutos, segundos);
        int segdiferenca1 = t1.contasegundos();
        totaldif1 = segdiferenca-segdiferenca1;
        return totaldif1;
    }
        //totaldif = (totaldif1 <0) ? totaldif1*-1 : totaldif1; //Converter para positivo
//Ponto F
        public String tempomaior(Tempo t1){
            String resultado ="";
            int totaldif = 0, totaldif1 = 0;
        int segdiferenca = convertersegundos(hora, minutos, segundos);
        int segdiferenca1 = t1.contasegundos();
        totaldif1 = segdiferenca-segdiferenca1;
        resultado = (totaldif1 <0) ? "é menor que "  : "é maior que";
            return resultado;
        }

//Ponto G
        public Tempo differencaemtempo(Tempo t1){
            int totaldif = 0, totaldif1 = 0;
            Tempo resultado = null;
        int segdiferenca = convertersegundos(hora, minutos, segundos);
        int segdiferenca1 = t1.contasegundos();
        totaldif1 = segdiferenca-segdiferenca1;
        hora = totaldif1/3600;
        totaldif1 = totaldif1%3600;
        minutos = totaldif1/60;
        totaldif1 = totaldif1%60;
        segundos = totaldif1;
        return new Tempo(hora, minutos, segundos);
        }

//ponto H
        public String toformatoString(){
            String horainglesa ="";

            horainglesa = (hora <=12)?hora + ":"+minutos + ":"+segundos+"AM": hora + ":"+minutos + ":"+segundos+"PM";
            return horainglesa;


        }

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

O problema está na 1ª Classe na seguinte linha:

tempo3 = tempo1

O que estás a fazer é uma referência ao tempo1, isso faz com que qualquer alteração feita ao tempo3 surta efeito no tempo1, pois eles são exactamente o mesmo objecto mas com nomes diferentes.

O que tens de fazer é implementar a interface Cloneable na classe Tempo.

Ficava assim:

public class Tempo implements Cloneable {

Na mesma classe Tempo tens de subscrever(override) o método clone()

@Override
protected Object clone() throws CloneNotSupportedException {
        return super.clone();
}

Por fim na função main da aplicação farias isto:

public static void main(String[] args) throws CloneNotSupportedException {
        int dif_segun = 0, dif_segunextenco = 0;
        String maiormenor = "";
        Tempo tempo1;
        Tempo tempo2 = new Tempo(6, 6, 6);
        Tempo tempo3;

        tempo1 = Tempo.lerTempo();
        tempo3 = (Tempo)tempo1.clone();
        tempo2.addsegundo(6, 6, 59);
        System.out.println(tempo1);
        System.out.println(tempo2);
        dif_segun = tempo3.differencasegundos(tempo2);
        System.out.println("A Differença é de :" + dif_segun + " segundos");
        maiormenor = tempo3.tempomaior(tempo2);
        System.out.println("O tempo " + tempo1 + maiormenor + tempo2);
        tempo3 = tempo3.differencaemtempo(tempo2);
        System.out.println(tempo3);
        System.out.println(tempo1.toformatoString());
}

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.