Eu estou fazendo um trabalho que consite em um jogo RPG.
Sendo EU contra CPU, quando eh vez da cpu ela tem escolher
um tipo de defesa (NORMAL ou ESPECIAL) aleatoriamente, eu tenho os metodos
DefesaNormal() e DefesaEspecial(), tem como usar um random
para escolher esses metodos?
Duvidas com Metodos
16 Respostas
Tem, mas será preciso criar um novo método para fazer a seleção randômica e um if/else para tratar qual será utilizada.
Lógica, camarada.
Cara,
Eu faria da seguinte forma. Criaria um método único com passagem de parametro (Constante 1 ou 2) e faria um case dentro do método.
Sendo assim, poderia criar um random pra gerar o numero do parametro e depois passaria a chamada do método com esse parametro.
Acredito que fique mais facil dessa forma.
Abraço
Emerson
Boa tarde, pessoal!
Estou chegando ao grupo agora.
Estava tentando rodar um programa básico para testar a invocação de uma classe criada por mim, conforme código abaixo:
class Documentos
{
String foto;
String nome;
Integer codigo;
String dataNascimento;
}
class Programa
{
public static void main(String[] args)
{
Documentos documento1;
documento1 = new Documentos();
documento1.codigo = 123456;
documento1.nome = "Alfredo";
documento1.foto = "Img1.png";
documento1.dataNascimento = "20/05/1990";
System.out.println("Código do documento: " + documento1.codigo);
}
}
E ao ser executado o erro [color=red]“Exception in thread “main” java.lang.NoSuchMethodError: main”[/color] é retornado. Já verifiquei pelo Google algumas opções para que esse erro ocorra, pórem todos se referem sobre a má definição ou não definição do método “main”. Vi e revi o código, mas não consigo identificar onde declarei o método de forma errada. Será que poderiam me ajudar?
Obrigada!
Cris
Boa tarde, pessoal!
Estou chegando ao grupo agora.
Estava tentando rodar um programa básico para testar a invocação de uma classe criada por mim, conforme código abaixo:class Documentos { String foto; String nome; Integer codigo; String dataNascimento; }class Programa { public static void main(String[] args) { Documentos documento1;documento1 = new Documentos(); documento1.codigo = 123456; documento1.nome = "Alfredo"; documento1.foto = "Img1.png"; documento1.dataNascimento = "20/05/1990"; System.out.println("Código do documento: " + documento1.codigo); }}
E ao ser executado o erro [color=red]“Exception in thread “main” java.lang.NoSuchMethodError: main”[/color] é retornado. Já verifiquei pelo Google algumas opções para que esse erro ocorra, pórem todos se referem sobre a má definição ou não definição do método “main”. Vi e revi o código, mas não consigo identificar onde declarei o método de forma errada. Será que poderiam me ajudar?
Obrigada!
Cris
Primeiramente, http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor
Bom, quais os métodos que você criou na classe Documentos?
Se sintetizou, peço que leia primeiro o conteúdo do link que postei e, também, poste o código todo.
Boa tarde, pessoal!
Estou chegando ao grupo agora.
Estava tentando rodar um programa básico para testar a invocação de uma classe criada por mim, conforme código abaixo:class Documentos { String foto; String nome; Integer codigo; String dataNascimento; } class Programa { public static void main(String[] args) { Documentos documento1; documento1 = new Documentos(); documento1.codigo = 123456; documento1.nome = "Alfredo"; documento1.foto = "Img1.png"; documento1.dataNascimento = "20/05/1990"; System.out.println("Código do documento: " + documento1.codigo); } }E ao ser executado o erro [color=red]“Exception in thread “main” java.lang.NoSuchMethodError: main”[/color] é retornado. Já verifiquei pelo Google algumas opções para que esse erro ocorra, pórem todos se referem sobre a má definição ou não definição do método “main”. Vi e revi o código, mas não consigo identificar onde declarei o método de forma errada. Será que poderiam me ajudar?
Obrigada!
Cris
Então…
Um método main só pode estar em uma classe cujo nome seja o mesmo do arquivo java no qual ela está.
Por exemplo, se a tua classe se chama Programa, o arquivo java deve chamar-se Programa.java.
É uma definição da linguagem.
Oi, machado!
Obrigada por responder!
Na verdade, esse foi um exemplo que peguei numa apostila de Java que explica sobre as classes. Pelo que entendi, a princípio este seria o código completo. Tentei incluir um “public class DocumentoGeral” como classe principal envolvendo todas as outras, mas o compilador retorna vários erros. Quando retiro essa linha de código, ele passa pelo compilador, porém retorna erro de execução. Por isso, não estou conseguindo entender.
Cris
Ao seguir exemplos é preciso tomar certos cuidados.
Tente entender a lógica e não apenas transcrever de um lado para outro.
Neste caso, sugiro até trocar o nome das variáveis e refazer a classe.
Para chegar à conclusão do que passei, criei um arquivo java com nome Programas.java e colei ambas as classes que você postou.
Ele executou normalmente.
Tentei fazer assim:
public class DocumentoGeral
{
class Documentos
{
String foto;
String nome;
Integer codigo;
String dataNascimento;
}
class Programa
{
public static void main(String[] args)
{
Documentos documento1;
documento1 = new Documentos();
documento1.codigo = 123456;
documento1.nome = "Alfredo";
documento1.foto = "Img1.png";
documento1.dataNascimento = "20/05/1990";
System.out.println("Código do documento: " + documento1.codigo);
}
}
}
Certo, apenas modifique, isole a classe pública DocumentoGeral
public class DocumentoGeral{
public void static main(String args[]){
new Programa().run();
}
}
e altere a programa
class Documentos
{
String foto;
String nome;
Integer codigo;
String dataNascimento;
}
class Programa{
public void run(){
Documentos documento1;
documento1 = new Documentos();
documento1.codigo = 123456;
documento1.nome = "Alfredo";
documento1.foto = "Img1.png";
documento1.dataNascimento = "20/05/1990";
System.out.println("Código do documento: " + documento1.codigo);
}
}
Aí deve rodar.
Mas eu procurei entender o código, tanto que a única coisa que ele faz de diferente de um código mais simples ainda, é definir uma variável a partir da que foi criada. E instanciar objetos a partir de atributos que não foram declarados na própria classe, e sim numa classe externa. Eu entendi a lógica, só não entendi a falta de uma classe principal que englobe todas as outras e o retorno de erro do método “main”.
Você poderia postar o código que criou para eu entender a diferença?
Obrigada!
Legal.
Recapitulando, o erro Exception in thread “main” java.lang.NoSuchMethodError: main se refere ao fato de que o arquivo .java e a classe não compartilham o mesmo nome.
Assim irá funcionar
public class DocumentoGeral
{
public static void main(String[] args){
new Programa().main();
}
}
class Documentos
{
String foto;
String nome;
Integer codigo;
String dataNascimento;
}
class Programa
{
public void main()
{
Documentos documento1;
documento1 = new Documentos();
documento1.codigo = 123456;
documento1.nome = "Alfredo";
documento1.foto = "Img1.png";
documento1.dataNascimento = "20/05/1990";
System.out.println("Código do documento: " + documento1.codigo);
}
}
Isto por que, tanto Documento quanto Programa estão no mesmo arquivo de DocumentoGeral. Caso estivessem em outro arquivo, sem o modificador public isto não aconteceria.
Deixa eu ver se entendi: Não pode haver “class” dentro de “class”. E se fosse criado em outro arquivo, bastaria importar a classe e chamar seus métodos através de objetos, mas, você disse que se tivessem sido criados em outro arquivo e sem o modificador “public” o erro não aconteceria. Mas para eu acessar o método de uma classe externa, esse método não tem que ser público? Porque pelo que já aprendi ( se não tiver sido errado), se o método não for público, ele estará acessível apenas para aquela classe onde foi criado.
Se eu estiver fazendo perguntas primárias demais que atrapalham o fórum, por favor, me avisem que vou procurar na apostila. Rs.
Na verdade, pode.
Você teria inherited classes.
Porém, este é um conceito que você deve ver mais adiante. Por enquanto, apenas siga o fluxo normal.
Após entender bem esta parte, aí sím, parta para classes internas.
As regras do java determinam que uma classe marcada com o modificador public deve, obrigatoriamente, ser escrita em um arquivo com mesmo nome que ela. Me referi a isto, especificamente.
Outra coisa, o método que não for identificado como públic terá visão pacote, ou seja, todas as classes que estiverem na mesma package e tiverem um objeto da classe em questão (que possui o método sem public) poderão utilizá-lo.
AAAAAhhhh, agora sim entendi tudo o que quis me explicar. A sua última postagem foi ótima. Rs. E com a sua explicação lembrei de um artigo que li sobre hierarquia de classes (ou árvore): você pode ter uma classe que engloba várias e dentro desta, outras classes que também tem classes internas, e assim por diante. As classes internas podem utilizar os métodos e atributos das suas classes “pai” até a mais externa, só não pode utilizar das classes da qual não faz parte mesmo todas estando englobadas por uma principal. Se o método não for definido como público para que todos o acessem, somente as classes internas a ela podem acessar esses métodos e atributos.
Estou certa ou errada? Rs. Mesmo assim, vou seguir seu conselho e continuar passo-a-passo.
Obrigada!
Obs.: Se eu estiver errada, por favor, me corrija. Rs 
posta o jogo depois.
é isso aí usa 1 ou 2.