1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema em java

Discussão em 'Programação' iniciada por alfinete, 26 de Junho de 2007. (Respostas: 9; Visualizações: 1184)

  1. alfinete

    alfinete Power Member

    tenho este code nu m file com o mesmo nome da class, que puxa o jogo do galo que esta noutro file, ate ai tdo bem, corre tdo lindamente.

    Código:
    public class RunGalo {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Galo g = new Galo();
            try{
                g.corregagalo();
                
            }catch(Exception e){
            }
        }
    
    }
    

    este file abaixo é o file que faz o menu para puxar os dois jogos , que tb corre perfeitamente

    Código:
    
    import java.util.Scanner;
    
    
    /**
     * Interface para a aplicacao Jogos.
     * @author paulo.carvalho n31660
     */
    public class JogosUI {
    
        
        /**
         * Constructor.
         *
         */
        public JogosUI(){
        }
    
        /**
         * Executa a interface da aplicacao.
         * @throws Exception
         */
        public void run() throws Exception {
            // Interface
            int opcao = 0;
            do {
                
                System.out.println("1 - Jogo do Galo");
                System.out.println("2 - Jogo da Forca");
                System.out.println("3 - Sair\n");
                System.out.println("\nEscolha uma opcao:\n");
                System.out.println("\nopcao ->> ");
    
                opcao = new Scanner(System.in).nextInt();
    
                switch (opcao) {
                case 1:
                    jogoDoGalo();
                    break;
                case 2:
                    jogoDaForca();
                    break;
                case 3:
                    sair();
                default:
                    System.out.println("\nOpcao desconhecida!\n");
                break;
                }
            }while(true);
        }
    
        
        protected void jogoDoGalo(){    
        //System.out.println("Jogo Galo");
                 
            
        }
    
        protected void jogoDaForca(){
            //System.out.println("Jogo Forca");
        
       
        }//forca
    
        
        protected void sair(){
            System.exit(1);    
            System.out.println("\nTou a ver que nao lhe apetece jogar!\n");
        }
    
    }
    
    
    
    o que que quero fazer é chamar a class RunGalo na função abaixo , pertencente ao code a cima da class JogosUI

    Código:
     protected void jogoDoGalo(){    
        //System.out.println("Jogo Galo");
                 
            
        }
    
    para poder carregar o jogo quando clico na opção dele

    agradecia imenso uma ajuda
     
  2. MadOnion

    MadOnion Folding Member

    Tenta estruturar melhor o teu programa.
    Deves usar uma classe Principal que onde está o main(), por norma chamo a essa classe SmallBang(um pouco por motivos académicos), que cria uma instância da classe Principal(secundária, digamos assim).

    PHP:
    public class SmallBang {
           public static 
    void main(String[] args) {
                   
                  new 
    JogosUI().run();
           }
    }
    Dentro da classe JogosUI, por sua vez, dentro do ciclo tens tudo bem feito.
    No metodo jogoDoGalo() chamas um classe que simula um jogo do galo, por exemplo:
    PHP:
    protected void jogoDoGalo() {    

           new 
    Galo().corregagalo();        
    }

    btw, já tinhas criado uma thread, não cries outras threads, para não dispersar a informação.
     
  3. alfinete

    alfinete Power Member

    não estou a conseguir nam sei pq

    agradecia uma ajuda mais explicita, pois sou iniciante
     
  4. MadOnion

    MadOnion Folding Member

    Qual é a tua dúvida então?
    Supondo que tens uma classe Galo, ou algo que simula um jogo do galo, basta que na classe JogosUI se a opção for para começar um jogo do galo, criar a Instancia e chamar o metodo como tinhas na errónia classe RunGalo.

    O teu programa tem no mínimo 4 classes(sem contar com eventuais subclasses), a classe Principal, a classe JogosUI, e classe Galo e a classe Forca. Cada um com o seu conjunto de operações(metodos) que são inerentes à classe.

    Para ser mais específico, o que não percebeste no meu post anterior?
     
  5. liquido

    liquido Power Member

    tens de ver que no java não tens "funções" como disseste, que isso é um conceito que não existe bem na programação por objectos. Cada ficheiro .java deve conter uma Classe como é o caso da JogoUI, Galo e RunGalo.. Sinceramente acho que não será a melhor escolha de objectos diferentes (por exemplo a diferença entre Galo e RunGalo mas não vou discutir a tua escolha), a solução passará por incluíres essas tuas 3 classes no mesmo pacote (package) de forma a que as classes possam aceder umas às outras tipo:

    RunGalo.java:
    Código:
    package jogodogalo;
    
    public class RunGalo {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Galo g = new Galo();
            try{
                g.corregagalo();
                
            }catch(Exception e){
            }
        }
    
    }
    
    JogosUI:

    Código:
    package jogodogalo;
    
    import java.util.Scanner;
    
    
    /**
     * Interface para a aplicacao Jogos.
     * @author paulo.carvalho n31660
     */
    public class JogosUI {
    
        
        /**
         * Constructor.
         *
         */
        public JogosUI(){
        }
    
        /**
         * Executa a interface da aplicacao.
         * @throws Exception
         */
        public void run() throws Exception {
            // Interface
            int opcao = 0;
            do {
                
                System.out.println("1 - Jogo do Galo");
                System.out.println("2 - Jogo da Forca");
                System.out.println("3 - Sair\n");
                System.out.println("\nEscolha uma opcao:\n");
                System.out.println("\nopcao ->> ");
    
                opcao = new Scanner(System.in).nextInt();
    
                switch (opcao) {
                case 1:
                    jogoDoGalo();
                    break;
                case 2:
                    jogoDaForca();
                    break;
                case 3:
                    sair();
                default:
                    System.out.println("\nOpcao desconhecida!\n");
                break;
                }
            }while(true);
        }
    
        
        protected void jogoDoGalo(){    
        //System.out.println("Jogo Galo");
            
        }
    
        protected void jogoDaForca(){
            //System.out.println("Jogo Forca");
        
       
        }//forca
    
        
        protected void sair(){
            System.exit(1);    
            System.out.println("\nTou a ver que nao lhe apetece jogar!\n");
        }
    
    }
    
    agora repara, tu dizes:

    ora isso não faz o mínimo sentido porque no mesmo programa apenas uma classe pode conter o método estático main e tu neste caso escolheste para ficar na classe RunGalo porisse terás de chamar JogosUI por parte do RunGalo e não o contrário criando uma instância de JogosUI na função que arranca...

    sinceramente acho que te baralhaste um bocado na escolha dos objectos e daí advém a dificuldade em estruturar o programa.
     
    Última edição: 26 de Junho de 2007
  6. MadOnion

    MadOnion Folding Member

    Sendo exatamente o que eu disse, de uma forma mais resumida.
     
  7. liquido

    liquido Power Member

    pois mas não referiste os pacotes...mas enfim lol...postcount +1...
     
  8. alfinete

    alfinete Power Member

    do tipo tenho um file forca.java e galo.java, que coorespondem cada um ao seu jogo

    tenho os jogosUI.java que corresponde ao menu do jogo.

    o Runjogos.java que cooresponde a chamada do menu

    Código:
    public class RunJogos {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            JogosUi j = new JogosUi();
            try{
                j.run();
                
            }catch(Exception e){
            }
        }
    
    } 
    
    o rungalo.java que cooresponde a chammada do galo.java

    Código:
    
    public class RunGalo {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Galo g = new Galo();
            try{
                g.corregagalo();
                
            }catch(Exception e){
            }
        }
    
    }
    
    
    e runforca.java que cooresponde a chamada do forca.java

    Código:
    
    public class RunForca {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Forca f = new Forca();
            try{
                f.CarregaForca();
                
            }catch(Exception e){
            }
        }
    
    } 
    
    
    estas duas ultimas são iguais a do run jogos , so muda é a chamada da classe.

    _________________________
    no jogosUI.java

    ha la duas funções

    Código:
    portected void  jogodogalo()
    {}
    
    protectedvoid Jogodaforca()
    {}
    
    que vão ser chamadas no respectivo menu

    gostava na primeira de chamar o Rungalo e na 2ª o runForca




    espero que ja tenha sido um pouco mais especifico com esta explicação

    obrigado
     
  9. MadOnion

    MadOnion Folding Member

    Como eu já tinha dito, e o lobito reforçou.
    Tira de lá o static main(String[] args) essa assinatura é especial, apenas é usada na tua classe RunJogos e ponto final, não se fala mais nisso.
    Em vez de teres uma classe RunGalo e RunForca, faz como te disse à bocado:

    PHP:
    portected void  jogodogalo() {
     new 
    Galo().corregaGalo(); 
    }

    protected 
    void Jogodaforca() {
     new 
    Forca().carregaForca(); 
    }
    Fica muito mais explicito, e segue o paradigma da POO.
    Será que consegui ser sucinto o suficiente?

    Se ainda assim queres insistir em chamar a classe RunGalo e RunForca, altera para o seguinte:

    Classe RunForca
    PHP:
    public class RunForca {

       public static 
    void simula () {

            
    Forca f = new Forca();
            try{
                
    f.carregaForca();
                
            }catch(
    Exception e){
       }
    }
    Classe RunGalo
    PHP:
    public class RunGalo {
         
        public static 
    void simula () {

            
    Galo g = new Galo();
            try{
                
    g.carregaGalo();
                
            }catch(
    Exception e){
       }
    }

    Na JogosUI:

    PHP:
    portected void  jogoDoGalo()
    RunGalo.simula(); }

    protected 
    void jogoDaForca()
    RunForca.simula(); }
    Mas a meu ver é má programação, as razões estão explicadas acima, e nos restantes posts.
    PS: Os nomes podem não estar correctos, mas segui a questão de estilo em java. Nomes de classes começam com letra grande, nomes de metodos com letra pequena e se o nome do metodo for constituido por mais do que uma palavra, começa com letra pequena e as restantes com letra grande.
     
    Última edição: 26 de Junho de 2007
  10. alfinete

    alfinete Power Member

    obrigado ja funciona
     

Partilhar esta Página