Como Chamar Funções do Método Main?

6 respostas
henriique

[b]Olá ! Esse é meu primeiro post aqui ...
Gostaria de tirar uma dúvida, aparentemente por mais que eu não consiga visualizar eu acredito que seja muito simples. Mas eu não sei aonde estou errando ...
Eu tenho que "criar" um relógio, não é necessário a hora do sistema ...
O exercício é sobre sobrecarga de métodos ...
O usuário pode altarar somente a hora ... ou a hora e os minutos ... ou a hora os minutos e os segundos ...
Até ai tudo bem ... mas eu preciso colocar o tratamento de erros, na classe clock.class ... e não dentro da main !!
E eu não estou conseguindo imaginar como trazer as funções de entrada de parametros na main para a clock ...
Se alguem entender minha dúvida, poderia me ajudar ?

PS: eu sei que pode ter outros erros, ou uso demasiados de funções e até mesmo comentários de forma errada no código, mas no momento eu precisaria de ajuda
somente em como tratar o erro de parametros entrados na Main, porem tratados na Clock.
Obrigado.

import javax.swing.JOptionPane;

/**
 * FATEC Mogi das Cruzes - Ago/2010
 * Analise e Desenvolvimento de Sistemas
 *
 * @author Henrique de Oliveira Silva
 * @contact [email removido]
 */
public class Clock {

    /**
     * Declaração de variáveis inteiras e privadas para controle
     */
    private int clockTime = 12;
    private int clockMinute = 30;
    private int clockSecond = 59;

    /**
     * Setando variável de controle clockTime como pública
     * e "renomeando" para pubClockTime
     * @param pubClockTime
     */
    public void setpubClockTime(int pubClockTime){this.clockTime = pubClockTime;}
    /**
     * Setando variável de controle clockMinute como pública
     * e "renomeando" para pubClockMinute
     * @param pubClockMinute
     */
    public void setpubClockMinute(int pubClockMinute){this.clockMinute = pubClockMinute;}
    /**
     * Setando variável de controle clockSecond como pública
     * e "renomeando" para pubClockSecond
     * @param pubClockSecond
     */
    public void setpubClockSecond(int pubClockSecond){this.clockSecond = pubClockSecond;}

    /**
     * Entrada, tratamento e correção de paramentrs
     * entrados pelo usuário
     * @param clockTime
     */
    public void changeClock(int pubClockTime){

        if(pubClockTime > 23 || pubClockTime < 00){
            JOptionPane.showMessageDialog(null, +pubClockTime+" não é uma hora válida!", "Atenção!", 1);
        }

                  :::: PRECISO TRATAR OS ERROS AQUI :::: 

          /**
            * Atribui o valor entrado pelo usuário
            * a variável clockTime instanciada no método Main por pubClockTime
            */
            clockTime = pubClockTime;

    }

    /**
     * Entrada, tratamento e correção de paramentrs
     * entrados pelo usuário
     * @param clockTime
     * @param clockMinute
     */
    public void changeClock(int pubClockTime, int pubClockMinute){

        if(pubClockTime > 23 || pubClockTime < 00){
            JOptionPane.showMessageDialog(null, +pubClockTime+" não é uma hora válida!", "Atenção!", 1);
        }

                  :::: PRECISO TRATAR OS ERROS AQUI :::: 

      /**
        * Atribui o valor entrado pelo usuário
        * a variável clockTime instanciada no método Main por pubClockTime
        */
        clockTime = pubClockTime;

        if(pubClockMinute > 59 || pubClockMinute < 00){
            JOptionPane.showMessageDialog(null, +pubClockMinute+" não são minutos válidos!", "Atenção!", 1);
        }

                  :::: PRECISO TRATAR OS ERROS AQUI :::: 

      /**
        * Atribui o valor entrado pelo usuário
        * a variável clockMinute instanciada no método Main por pubClockMinute
        */
        clockMinute = pubClockMinute;
    }

    /**
     * Entrada, tratamento e correção de paramentros
     * entrados pelo usuário
     * @param clockTime
     * @param clockMinute
     * @param clockSecond
     */
    public void changeClock(int pubClockTime, int pubClockMinute, int pubClockSecond){

        if(pubClockTime > 23 || pubClockTime < 00){
            JOptionPane.showMessageDialog(null, +pubClockTime+" não é uma hora válida!", "Atenção!", 1);
        }     

                  :::: PRECISO TRATAR OS ERROS AQUI :::: 

      /**
        * Atribui o valor entrado pelo usuário
        * a variável clockTime instanciada no método Main por pubClockTime
        */
        clockTime = pubClockTime;

        if(pubClockMinute > 59 || pubClockMinute < 00){
            JOptionPane.showMessageDialog(null, +pubClockMinute+" não são minutos válidos!", "Atenção!", 1);
        }

                  :::: PRECISO TRATAR OS ERROS AQUI :::: 

      /**
        * Atribui o valor entrado pelo usuário
        * a variável clockMinute instanciada no método Main por pubClockMinute
        */
        clockMinute = pubClockMinute;


        if(pubClockSecond > 59 || pubClockSecond < 00){
            JOptionPane.showMessageDialog(null, +pubClockSecond+" não são segundos válidos!", "Atenção!", 1);
        }

                  :::: PRECISO TRATAR OS ERROS AQUI :::: 

      /**
        * Atribui o valor entrado pelo usuário
        * a variável clockSecond instanciada no método Main por pubClockSecond
        */
        clockSecond = pubClockSecond;
    }
    /**
     * Método para retorno das modificações efetuadas pelo usuário
     * @return Done
     */
    public String Done(){
        return(clockTime+":"+clockMinute+":"+clockSecond);
    }

}
import javax.swing.JOptionPane;

/**
 * FATEC Mogi das Cruzes - Ago/2010
 * Analise e Desenvolvimento de Sistemas
 *
 * @author Henrique de Oliveira Silva
 * @contact [email removido]
 */
public class MasterClockSoucer {

    /**
     * Entry pointer do programa
     * @param args
     */
    public static void main(String[] args) {

       /**
         * Declarada e inicializada variável de controle das opções
         */
        int menu = 1;
        int userChoiceHour;
        int userChoiceMinute;
        int userChoiceSecond;

        /**
          * Declarada nova variável para instânciar a classe Clock
          */
         Clock userHour = new Clock();

        /**
          * Laço de reptição para manter o menu sempre
          * como retorno após qualquer alteração efetuada pelo
          */
         while(menu != 0){

           /**
             * Entrada dos parâmetros pelo usuário
             * efetuada conversão de tipo - String para Int -
             * E apresentação da hora atual - padrão do programa ou atualizada pelo usuário
             */
            menu = Integer.parseInt(JOptionPane.showInputDialog(null, "Ecolha a opção para ser alterada:\n\n "+
                                                                      "1 - Hora\n "+
                                                                      "2 - Hora e Minutos\n "+
                                                                      "3 - Hora, Minutos e Segundos\n"+
                                                                      " 0 - Sair.\n\n"+
                                                                      "                  Hora Atual: "+userHour.Done()+"s", "JavaClock", JOptionPane.PLAIN_MESSAGE));

            /**
             * Inicio da rotina para seleção e tratamento dos parâmetros
             * entrados pelo usuário
             */
            switch(menu){
                /**
                 * Tratamento caso seja selecionada a opção 1 no menu
                 */
                case 1:
                     //:::::: HORAS ::::::::

                    /**
                     * Declarada e inicializada nova variável para receber
                     * a Hora escolhida pelo usuário para alteração
                     */
                    userChoiceHour = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite a Hora desejada: ", "JavaClock", JOptionPane.PLAIN_MESSAGE));

                    /**
                     * Referência o novo objeto ao método changeClock da classe relogio
                     */
                    userHour.changeClock(userChoiceHour);

                    /**
                     * Confirmação de alteração bem sucedida
                     */
                    JOptionPane.showMessageDialog(null, "Alteração efetuada com sucesso!", "JavaClock", 1);

                    /**
                     * Retorna das alterações feitas pelo usuário
                     */
                    JOptionPane.showMessageDialog(null, "Hora alterada para: "+userHour.Done()+"s.", "JavaClock", 2);
                // Break case 1
                break;

                /**
                 * Tratamento caso seja selecionada a opção 2 no menu
                 */
                case 2:
                    // :::::: HORAS ::::::::

                    /**
                     * Declarada e inicializada nova variável para receber
                     * a Hora escolhida pelo usuário para alteração
                     */
                    userChoiceHour = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite a Hora desejada: ", "JavaClock", JOptionPane.PLAIN_MESSAGE));

                    // :::::: MINUTOS ::::::::

                    /**
                     * Declarada e inicializada nova variável para receber
                     * os Minutos escolhidos pelo usuário para alteração
                     */
                    userChoiceMinute = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite os minutos desejados: ", "JavaClock", JOptionPane.PLAIN_MESSAGE));

                    /**
                     * Referência o novo objeto ao método changeClock da classe relogio
                     * para alteração das Horas e Minutos
                     */
                    userHour.changeClock(userChoiceHour, userChoiceMinute);

                    /**
                     * Confirmação de alteração bem sucedida
                     */
                    JOptionPane.showMessageDialog(null, "Alterações efetuadas com sucesso!", "JavaClock", 1);

                    /**
                     * Retorna das alterações feitas pelo usuário
                     */
                    JOptionPane.showMessageDialog(null, "Hora alterada para: "+userHour.Done()+"s.", "JavaClock", 2);
                 // Break case 2
                 break;

                /**
                 * Tratamento caso seja selecionada a opção 2 no menu
                 */
                case 3:
                    // :::::: HORAS ::::::::

                    /**
                     * Declarada e inicializada nova variável para receber
                     * a Hora escolhida pelo usuário para alteração
                     */
                    userChoiceHour = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite a Hora desejada: ", "JavaClock", JOptionPane.PLAIN_MESSAGE));

                    // :::::: MINUTOS ::::::::

                    /**
                     * Declarada e inicializada nova variável para receber
                     * os Minutos escolhidos pelo usuário para alteração
                     */
                    userChoiceMinute = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite os minutos desejados: ", "JavaClock", JOptionPane.PLAIN_MESSAGE));

                    // :::::: SEGUNDOS ::::::::

                    /**
                     * Declarada e inicializada nova variável para receber
                     * os Minutos escolhidos pelo usuário para alteração
                     */
                    userChoiceSecond = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite os segundos desejados: ", "JavaClock", JOptionPane.PLAIN_MESSAGE));

                    /**
                     * Referência o novo objeto ao método changeClock da classe relogio
                     * para alteração dos Segundos
                     */
                    userHour.changeClock(userChoiceHour, userChoiceMinute, userChoiceSecond);

                    /**
                     * Confirmação de alteração bem sucedida
                     */
                    JOptionPane.showMessageDialog(null, "Alterações efetuadas com sucesso!", "JavaClock", 1);

                    /**
                     * Retorna das alterações feitas pelo usuário
                     */
                    JOptionPane.showMessageDialog(null, "Hora alterada para: "+userHour.Done()+"s.", "JavaClock", 1);
                 // Break 3
                 break;

                /**
                 * Tratamento caso seja selecionada a opção 0 no menu
                 */
                case 0:
                     /* Declaração e incialização da variável closeSistem
                      * configuração da variável para receber JOptionPane.showCONFIRMDialog
                      * (showConfirmDialog(null ,"message", "title", JOptionPane.YES_NO_OPTION, 2)
                      */
                    int closeSistem = JOptionPane.showConfirmDialog(null, "Deseja realmente encerrar a sessão?", "Atenção!", JOptionPane.YES_NO_OPTION , 2);
                    // Se variável closeSistem for igual (==) YES_OPTION - fechar o sistema
                    if (closeSistem == JOptionPane.YES_OPTION){
                        System.exit(0);
                    }
                    // Senão, retornará para o menu principal
                    else{
                        menu = 1;
                    }

                // Break 0
                break;

                // Default para captura de opções que não são válidas no menu
                default:
                    // Erro!
                    JOptionPane.showMessageDialog(null, +(menu)+" não é uma opção válida!", "Atenção!", 2);
                    
             } // While

        } // Switch

    } // Main

} // MasterClockSoucer

6 Respostas

joeroots

Oi,
Eu não entendi muito bem o seu problema cara, você quer puder chamar por exemplo um menu de dentro da classe clock?
tipo chama o JOptionPane.showInputDialog() de dentro da classe Clock ???

Eu fiz algumas modificações aqui na suas classes, nõ está bom, mais ficou mais claro.

Clock.java

import javax.swing.JOptionPane;

public class Clock {

    private int clockTime = 12;
    private int clockMinute = 30;
    private int clockSecond = 59;
	
	
	/* Funcoes de verificação */
	private boolean isHoraCorreta(int hora){
		 if(hora > 23 || clockTime < 00){
            JOptionPane.showMessageDialog(null, +hora+" não é uma hora válida!", "Atenção!", 1);
            return false;
        }
       	return true;
	}
	
	private boolean isMinutosSegundosCorreto(int tempo){
		if(tempo > 59 || tempo < 00){
            JOptionPane.showMessageDialog(null, +tempo+" não são válidos !", "Atenção!", 1);
            return false;
        }
        return true;
	}	
	
	
	/**
	 * Pede horario e já o transforma para inteiro
	 **/
	private int pedeHorario(String quem){
		String resposta = JOptionPane.showInputDialog(null, "Digite "+quem);
		return Integer.parseInt(resposta);
	}
	
	/**
	 * Muda somente a hora
	 **/
    public void changeClock(int hora){
    	if(isHoraCorreta(hora)){
    		clockTime = hora;
    	}
    }
	
	/**
	 * Muda hora e minuto
	 **/
    public void changeClock(int hora, int minuto){
    	
        if(isHoraCorreta(hora)){
        	clockTime = hora;
        	
        	if(isMinutosSegundosCorreto(minuto)){
        		clockMinute = minuto;
        	}
        }
    }

	/**
	 * Muda hora minuto e segundos
	 **/
    public void changeClock(int hora, int minuto, int segundos){

        if(isHoraCorreta(hora)){
        	clockTime = hora;
        	
        	if(isMinutosSegundosCorreto(minuto)){
        		clockMinute = minuto;
        		
        		if(isMinutosSegundosCorreto(segundos)){
        			clockSecond = segundos;
        		}
        	}
        }
    }
	
	public void mostraMenu(){
		
        int menu = 1;
        int hora;
        int minuto;
        int segundos;

        
       	while(menu != 0){

       		menu = Integer.parseInt(JOptionPane.showInputDialog(null, 
	          	"Ecolha a opção para ser alterada:\n\n "+
	          	"1 - Hora\n "+
	            "2 - Hora e Minutos\n "+
				"3 - Hora, Minutos e Segundos\n"+
	            " 0 - Sair.\n\n"+
	            "Hora Atual: "+toString()+"s", "JavaClock", JOptionPane.PLAIN_MESSAGE));

       
      		switch(menu){
                case 1:
                    hora  = pedeHorario("a(s) hora(s)");
                    changeClock(hora);
                	break;

                case 2:
                   	hora  = pedeHorario("a(s) hora(s)");
				    minuto = pedeHorario("o(s) minuto(s)");
	                changeClock(hora, minuto);
                 	break;

                case 3:
                    hora  = pedeHorario("a(s) hora(s)");
				    minuto = pedeHorario("o(s) minuto(s)");
					segundos = pedeHorario("o(s) segundos(s)");
	               	changeClock(hora, minuto, segundos);
                 	break;

                case 0:
                	int closeSistem = JOptionPane.showConfirmDialog(null, "Deseja realmente encerrar a sessão?", "Atenção!", JOptionPane.YES_NO_OPTION , 2);
                    
                    if (closeSistem == JOptionPane.YES_OPTION){
                        System.exit(0);
                    }else{
                        menu = 1;
                    }

                	break;	
                default:
                    JOptionPane.showMessageDialog(null, +(menu)+" não é uma opção válida!", "Atenção!", 2);
                    
             } 
        }
	}
	
	/**
	 * Override no metodo toString()
	 * Que exerce a mesma função que faria Done()
	 **/
    public String toString(){
        return(clockTime+":"+clockMinute+":"+clockSecond);
    }

}

MasterClockSource

import javax.swing.JOptionPane;


public class MasterClockSource {

    public static void main(String[] args) {
		Clock relogio = new Clock();
		relogio.mostraMenu();
    }

}

Se não for isso tenta explicar melhor a sua dúvida…
T+

henriique

Oi !! Obrigado por ter respondido !!
Então o que eu preciso é colocar o tratamento de erros aqui dentro, existe uma forma de faze-lo ??

public void changeClock(int pubClockTime){  
   
         if(pubClockTime > 23 || pubClockTime < 00){  
             JOptionPane.showMessageDialog(null, +pubClockTime+" não é uma hora válida!", "Atenção!", 1);  
         }
         else{
             [DA ERRO NO "userChoiceHour"]
             userChoiceHour = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite a Hora desejada: ", "JavaClock", JOptionPane.PLAIN_MESSAGE));
         }

                   :::: EU PRECISO QUE O USUÁRIO TODA VEZ QUE DIGITE UM HORARIO INCORRETO,
                   :::: APOS APARECER A MENSAGEM DE ERRO, EU PRECISO QUE 
                   :::: ELE CONTINUA NA TELA DE : "DIGITE A HORA DESEJADA"
   
  
           /** 
             * Atribui o valor entrado pelo usuário 
             * a variável clockTime instanciada no método Main por pubClockTime 
             */  
             clockTime = pubClockTime;  
   
     }

Eu vi o seu código e para mim ficou bom, mas eu precisava entregar da forma que eu fiz.
Porque preciso da avaliação dele =/

joeroots

Entao, uma forma seria você colocar um while da seguinte forma:

while(!isHoraCorreta(hora)){
	hora  = pedeHorario("a(s) hora(s)");
}
henriique

Humm … não deu certo ! Mas obrigado !
Se alguem mais quiser tentar me ajudar, poderia usar as minhas variáveis ? :roll:

gfuranku

Ao invez de tentar tratar o erro por if/else…porque não utiliza um bloco try-Catch?

henriique

Com try-Catch eu consigo sim …
Mas eu precisaria usar o try-Catch para tratar os erros na Classe Clock.
E eu não sei como, sem usar algumas das variáveis da Main.
E sempre dá erro quando tento usar algumas da Main dentro da Clock.
Mas obrigado =)

Criado 28 de agosto de 2010
Ultima resposta 29 de ago. de 2010
Respostas 6
Participantes 3