[RESOLVIDO] Duvida sobre Class Public

Olá Pessoal, sou um membro novo no Forum, então vou me apresentar, antes de postar minha duvida ^^

Meu nome é Ronan, e estou estudando Analise e Desenvolvimento de Sistemas - 1º Semestre.
Na Minha Faculdade estamos trabalhando com C, contudo estou + interessado em aprender JAVA. Tambe quero aprender C, mais por enquanto vou levando o aprendizado de ambas =]

Para estudar JAVA, estou utilizando a Internet e o Livro - Use a Cabeça! JAVA. Estou gostando, apesar de algumas coisas que não estão 100% traduzidas (como a cruzada nos primeiros exercicios :frowning: )

Enfim, ainda nem sei utilizar direito o FORUM, mais vamos lá ^^

Bem, estava fazendo um exercicio desse livro, pelo Bloco de Notas, e quando vou compilar, ele dá erro.
o Erro diz

[quote]
C:\Users\Ronan\JAVA>javac gamelauncher.java
gamelauncher.java:1: class guessgame is public, should be declared in a file nam
ed guessgame.java
public class guessgame{
^
gamelauncher.java:66: class player is public, should be declared in a file named
player.java
public class player {
^
gamelauncher.java:4: p2 is already defined in guessgame
player p2;
^
gamelauncher.java:9: cannot find symbol
symbol : variable p3
location: class guessgame
p3 = new player();
^
gamelauncher.java:27: cannot find symbol
symbol : variable p3
location: class guessgame
p3.guess();
^
gamelauncher.java:35: cannot find symbol
symbol : variable p3
location: class guessgame
guessp1 = p3.number;
^
gamelauncher.java:77: cannot find symbol
symbol : variable guessgame
location: class gamelauncher
guessgame = new guessgame ();
^
gamelauncher.java:78: cannot find symbol
symbol : variable game
location: class gamelauncher
game.startgame ();
^
8 errors[/quote]

O Codigo não é muito pequeno, e peço desculpas c ficar desorganizado, mais n sei como colocar melhor isso (aceito sugestões =D)

Bem minha duvida é: como compilar? Tenho q dividir o codigo em varios arquivos? ou é erro na sintaxe?
O CMD diz que cada class public precisa estar declarada em um arquivo nomedaclasse.java, mais o livro não menciona dada

estão salvei somente com o nome da classe - public class gamelauncher - (creio que seja a principal ja q tem o metodo main).

Bem, como vcs viram, sou bem iniciante mesmo, então se vocês puderem tirar essa duvida, agradeceria muito =)

Peço desculpa por qualquer coisa, pois como eu disse não tenho experiencia, nem em JAVA nem nesse FORUM =D

Obrigado a todos.

Primeira regra, a sua classe java deve ser o mesmo nome do arquivo *.java

No seu caso, se a sua classe está declarada assim

public class MinhaPrimeiraClasseJava

então o seu arquivo obrigatoriamente deve se chamar

MinhaPrimeiraClasseJava.java

o nome da classe ta diferente do nome que vc coloco no

public class player  

Certo, isso eu sei, mais é que tem varias classes, e eu não sei qual delas deve ser NomeDoPrograma.java =]

nesse programa eu nomeei como: gamelauncher.java

OBRIGADO PELA RAPIDA RESPOSTA ^^

Isso realmente confunde que tá iniciando… quando eu tava no primeiro sem da facul quase 80% da sala (incluindo eu) ficamos empacados nisso aí quase uma aula inteira rsrs

então, complementando o thiago aí de cima, leia este link (em ingles) http://pt.w3support.net/index.php?db=so&id=968347
Cada arquivo pode ter quantas classes você quiser.

Cada arquivo deve ter uma única classe pública, que tem o mesmo nome do arquivo e, opcionalmente outras classes não públicas.

Quando você compilar um arquivo *.java que tenha mais de uma classe, será criado um arquivo *.class para cada classe :stuck_out_tongue:

Update:[size=18]<[/size]Apesar de ser possível mais de uma classe por arquivo, o comum é as classes serem públicas (e consequentemente, uma por arquivo)
Para você utilizar a classe externamente, ela deve ser pública[size=18]>[/size]

[quote=drigo.angelo]Isso realmente confunde que tá iniciando… quando eu tava no primeiro sem da facul quase 80% da sala (incluindo eu) ficamos empacados nisso aí quase uma aula inteira rsrs

então, complementando o thiago aí de cima, leia este link (em ingles) http://pt.w3support.net/index.php?db=so&id=968347
Cada arquivo pode ter quantas classes você quiser.

Cada arquivo deve ter uma única classe pública, que tem o mesmo nome do arquivo e, opcionalmente outras classes não públicas.

Quando você compilar um arquivo *.java que tenha mais de uma classe, será criado um arquivo *.class para cada classe :P[/quote]

Cara, não ensina o menino a fazer errado não. Até é permitido colocar várias classes num mesmo arquivo, mas além disso ser gambi, não vai permitir que nenhuma outra classe possa ser usada externamente (além da única pública).

Siga o bom conselho do outro amigo acima: coloque cada classe num arquivo NomeDaClasse.java. Você vai compilar a classe que tiver o método main, e automaticamente todas as classes referenciadas ali serão compiladas. Pra rodar, também, basta rodar a classe que tem o método main.

Opa, foi mal… não queria levar ninguém pro mal caminho… relamente pode ficar mais difícil de ler quando tem varias classes em um arquivo só… só estava expondo as possibilidades… (até porque nem eu faço isso)

Vo atualizar ali em cima :smiley:

1- use o Code para ficar mais facil de entender

gamelauncher.java

[code]

public class gamelauncher {

public static void main(String[] args) {
    guessgame meuGuessgame = new guessgame();
    meuGuessgame.startgame();
}

}[/code]

guessgame.java

[code]

public class guessgame {

player p1;
player p2;
//player p2;  //<- 2 variaveis com o mesmo nome
player p3;

public void startgame() {
    p1 = new player();
    p2 = new player();
    p3 = new player();

    int guessp1 = 0;
    int guessp2 = 0;
    int guessp3 = 0;

    boolean p1isright = false;
    boolean p2isright = false;
    boolean p3isright = false;

    int targetnumber = (int) (Math.random() * 10);
    System.out.println("Estou Pensando em um numero de 0 a 9 ...");

    while (true) {
        System.out.println("O Numero a adivinhar é " + targetnumber);

        p1.guess();
        p2.guess();
        p3.guess();

        guessp1 = p1.number;
        System.out.println(" O Jogador um forneceu o palpite " + guessp1);

        guessp1 = p2.number;
        System.out.println(" O Jogador dois forneceu o palpite " + guessp1);

        guessp1 = p3.number;
        System.out.println(" O Jogador tres forneceu o palpite " + guessp1);

        if (guessp1 == targetnumber) {
            p1isright = true;
        }
        if (guessp1 == targetnumber) {
            p1isright = true;
        }
        if (guessp1 == targetnumber) {
            p1isright = true;
        }

        if (p1isright || p1isright || p1isright) {

            System.out.println("Temos um Vencedor");
            System.out.println(" O Jogador 1 Acertou? : " + p1isright);
            System.out.println(" O Jogador 2 Acertou? : " + p2isright);
            System.out.println(" O Jogador 3 Acertou? : " + p3isright);
            System.out.println("Fim do JOgo");
            break; //fim do jogo, portanto saia do Loop
        } else {

//devemos continuar pq ninguem acertou
System.out.println(“Ninguem Acertou, Os Jogadores deve Tentar Novamente”);
//fim do if/else
}
}//fim do loop
}// fim do metodo
}//fim da classe[/code]

player.java



public class player {

    int number = 0; //onde entra o palpite

    public void guess() {
        number = (int) (Math.random() * 10);
        System.out.println("Estou Pensando em " + number);
    }
}

[b]assim vai funcionar

me deve 1 cerveja :twisted: [/b]

Amigão, bem vindo ao fórum.

Outra dica que posso complementar é que ao nomear suas classes, use o padrão de nomenclatura Java. Acho que o Use a Cabeça deve ter esse padrão, se não tiver acha ele rapidinho no Google.

Abs [] e bons estudos.

Rafael, só não ganha a cerveja porque não o ensinou sobre o padrão de nomenclatura… heuehuehue

caro adriano_si

estava trabalhando hahahaha, iria demorar muito em escrever o post

se vc reparar eu editei o meu post

tinha deixado meu imports

import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException;

mas para compensar como era o primeiro post dele ensinei a usar o code hahahahahahaa

1 copo de cerveja vale ne??

se nao valer fico satisfeito com um obrigado

Por que mais de uma classe no mesmo arquivo seria gambi?

E na verdade a classe fica com acesso default, ou seja, visível para todo o pacote.

Por que mais de uma classe no mesmo arquivo seria gambi?

E na verdade a classe fica com acesso default, ou seja, visível para todo o pacote.[/quote]
Hehehe me perguntei a mesma coisa … :?
Mas externamente eu presumi que ele se referia a fora do pacote mesmo…

Bom aí é com ele… rsrsrsrsrsrs :smiley:

ronan… resolveu cara ?? dá um retorno…

e se resolver seu problema altera o nome do topico para RESOLVIDO

OBRIGADO PESSOAL, Realmente, acho que estou devendo 1 cerveja a todos aki ^^

Primeiro,peço desculpa por não ter respondido antes. Estava na Faculdade, e so cheguei agora =]

Segundo, Obrigado d novo, realmente me esclareceu muito isso, e agora ja sei resolver uma boa parte dos problemas de meu livro ^^

Gostei muito do FORUM, pq todos ajudaram, e muito rapido, estava esperando uma resposta somente amanhã ou até depois, mais poucos minutos depois que eu mandei a pergunta, já havia gente respondendo, então, obrigado a todos que responderam, e os que não responderam mais passaram aki pra ajudar, mais não sabiam como, enfim, todos aki do FORUM. Obrigado ^^

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

COntinuando, eu ainda não testei o codigo, pq como eu disse, acabei de chegar, e pretendo tomar um banho e jantar antes ^^
Assim que eu testá-lo, volto e mudo o TOPICO PARA [RESOLVIDO] como disseram os colegas =)

===========================================================================================EDIT============

Funcionou PERFEITAMENTE, realmente merece uma caixa de cerveja, todo aki do FORUM =D

Vo Mudar para RESOLVIDO AGORA MESMO :smiley:

Vlw d novo

Mais uma vez Obrigado, e me aguardem, prometo voltar com uma duvida mais dificiu na próxima ^^

ronan16 por nada

quando precisar estamos ai

estou apenas retribuindo a ajuda que tive enquanto iniciava no java

ainda bem que aqui na empresa eles não ligam que o povo fique no forum