Problema em java

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
 
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.
 
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?
 
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:

o que que quero fazer é chamar a class RunGalo na função abaixo , pertencente ao code a cima da class JogosUI
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:
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.

Sendo exatamente o que eu disse, de uma forma mais resumida.
 
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
 
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:
Back
Topo