Exemplo do livro - Use a cabeça ! Java (GuessGame)

Olá eu estou lendo o livro Use a cabeça ! Java e tem um código que está no capitulo de Objetos que não está dando certo , e está igual ao livro , vou colocar o código abaixo.

public class GuessGame {
	Player p1;
	Player p2;
	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 número entre 0 e 9...");
		
		while(true) {
			System.out.println("O número a adivinhar é " + targetNumber);

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

		guessp1 = p1.number;
		System.out.println("O jogador um forneceu o palpite " + guessp1);
		guessp2 = p2.number;
		System.out.println("O jogador dois forneceu o palpite " + guessp2);
		guessp3 = p3.number;
		System.out.println("O jogador três forneceu o palpite " + guessp3);

		if (guessp1 == targetNumber) {
			p1isRight = true;
		}
		if (guessp2 == targetNumber) {
			p2isRight = true;
		}
		if (guessp3 == targetNumber) {
			p3isRight = true;
		}

		if (p1isRight || p2isRight || p3isRight) {

			System.out.println("Temos um vencedor!");
			System.out.println("O jogador um acertou? " + p1isRight);
			System.out.println("O jogador dois acertou? " + p2isRight);
			System.out.println("O jogador três acertou? " + p3isRight);
			System.out.println("Fim de jogo.");
			break;
		}else{
			System.out.println("Os jogadores terão que tentar novament.");
		}
	}
	}
} 

está dando esse erro em todos Player

GuessGame.java:8: cannot find symbol
symbol : class Player
location: class GuessGame
p2 = new Player();
^

Obrigado a quem ajudar :slight_smile:

a imagem do erro
http://img138.imageshack.us/img138/5590/errorsf.jpg

[quote=javatar]Olá eu estou lendo o livro Use a cabeça ! Java e tem um código que está no capitulo de Objetos que não está dando certo , e está igual ao livro , vou colocar o código abaixo.

public class GuessGame {
	Player p1;
	Player p2;
	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 número entre 0 e 9...");
		
		while(true) {
			System.out.println("O número a adivinhar é " + targetNumber);

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

		guessp1 = p1.number;
		System.out.println("O jogador um forneceu o palpite " + guessp1);
		guessp2 = p2.number;
		System.out.println("O jogador dois forneceu o palpite " + guessp2);
		guessp3 = p3.number;
		System.out.println("O jogador três forneceu o palpite " + guessp3);

		if (guessp1 == targetNumber) {
			p1isRight = true;
		}
		if (guessp2 == targetNumber) {
			p2isRight = true;
		}
		if (guessp3 == targetNumber) {
			p3isRight = true;
		}

		if (p1isRight || p2isRight || p3isRight) {

			System.out.println("Temos um vencedor!");
			System.out.println("O jogador um acertou? " + p1isRight);
			System.out.println("O jogador dois acertou? " + p2isRight);
			System.out.println("O jogador três acertou? " + p3isRight);
			System.out.println("Fim de jogo.");
			break;
		}else{
			System.out.println("Os jogadores terão que tentar novament.");
		}
	}
	}
} 

está dando esse erro em todos Player

GuessGame.java:8: cannot find symbol
symbol : class Player
location: class GuessGame
p2 = new Player();
^

Obrigado a quem ajudar :)[/quote]

Fala ai Javatar,
Pelo erro esta parecendo que faltou definir a classe Player. Vc definiu ela no seu programa???

Abração
Max 8)

Você tem a classe Player?

O código está igual ao livro , e lá mostra que executou perfeitamente.

Eu acho que meu código está incompleto ‘-’

agora o código está completo mais continua o erro =\

public class GuessGame {
	Player p1;
	Player p2;
	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 número entre 0 e 9...");
		
		while(true) {
			System.out.println("O número a adivinhar é " + targetNumber);

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

		guessp1 = p1.number;
		System.out.println("O jogador um forneceu o palpite " + guessp1);
		guessp2 = p2.number;
		System.out.println("O jogador dois forneceu o palpite " + guessp2);
		guessp3 = p3.number;
		System.out.println("O jogador três forneceu o palpite " + guessp3);

		if (guessp1 == targetNumber) {
			p1isRight = true;
		}
		if (guessp2 == targetNumber) {
			p2isRight = true;
		}
		if (guessp3 == targetNumber) {
			p3isRight = true;
		}

		if (p1isRight || p2isRight || p3isRight) {

			System.out.println("Temos um vencedor!");
			System.out.println("O jogador um acertou? " + p1isRight);
			System.out.println("O jogador dois acertou? " + p2isRight);
			System.out.println("O jogador três acertou? " + p3isRight);
			System.out.println("Fim de jogo.");
			break;
		}else{
			System.out.println("Os jogadores terão que tentar novament.");
		}
	}
	}
} 

public class Player {
	int number = 0;

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

public class GameLauncher {
	public static void main (String[] args) {
		GuessGame game = new GuessGame() ;
		game.startGame();
	}
}

Olá, achei o erro.

public void StartGame() {…} o método está com a letra maiúscula o certo seria public void startGame() {…}

Assim seu método main funcionará:

public class GameLauncher { public static void main (String[] args) { GuessGame game = new GuessGame() ; game.startGame(); //Seu método start com letra minúscula. } }

Flw

[quote=Frantic Avenger]Olá, achei o erro.

public void StartGame() {…} o método está com a letra maiúscula o certo seria public void startGame() {…}

Assim seu método main funcionará:

public class GameLauncher { public static void main (String[] args) { GuessGame game = new GuessGame() ; game.startGame(); //Seu método start com letra minúscula. } }

Flw[/quote]

Correto, é este mesmo o erro.
Rodei aqui e funcionou.

Como é que vocês salvo ele
GameLauncher.java?

[quote=javatar]Como é que vocês salvo ele
GameLauncher.java?[/quote]

Cada classe é um arquivo .JAVA

No seu caso são 3 classes, então 3 arquivos .java

GameLauncher.java
GuessGame.java
Player.java

e como que eu executo todos juntos para gerar o resultado?
=(

No livro não explica como salvar e executar todos

Obrigado a todos que estão ajudando até agora :slight_smile:

Boa noite galera,

Você deve compilar as 3 classes, supondo que esta fazendo isso via linha de comando, se estiver utilizando uma IDE isso é automático.

E vai executar somente a classe que possui o método main, essa é classe onde seu programa se inicia e a partir dela as outras vão sendo utilizadas.

[]s

Eu acho que entendi , vou tentar fazer isso quando sair do trabalho…
Salvar as classes
compilar
e executar o método main =)

Obrigado

[quote=javatar]Eu acho que entendi , vou tentar fazer isso quando sair do trabalho…
Salvar as classes
compilar
e executar o método main =)

Obrigado[/quote]

Sim…você tem as duas opções, clicar com o botão direito em cima do projeto e ir em executar (que automaticamente será executado o método void main ou ir na classe especifica e clicar em Executar Arquivo.

Void Main é o método principal do seu programa, por começará a execução.

Fala Galera apenas para complementar este tópico. O exemplo do livro levantou varias duvidas na internet, não só para os brasileiros, como também para os gringos.

Paginas 29 a 31 - Livro Use a Cabeça! Java

Rápido Saia de main!

Se você estiver em main(), não está realmente em Objetópolis. É adequado um programa de teste ser executado dentro do método main, mas, em um aplicativo OO real, você precisará de objetos que se comuniquem com outro objetos e não em um método main() estático criando e testando objetos.

[size=18]As duas finalidades de main:

  • testar sua classe real
    - acionar/iniciar seu aplicativo java[/size]

Um aplicativo java real nada mais é do que objetos se comunicando com outros objetos. Nesse caso, comunicar-se significa os objetos chamando os métodos um dos outros […].
[…] como uma prévia de como um aplicativo Java real pode se comportar, aqui está um pequeno exemplo. Já que ainda estamos nos estágios iniciais do aprendizado de Java, trabalharemos com um pequeno kit de ferramentas, portanto, você achará esse programa um pouco complicado e ineficiente. Talvez pense no que poderia fazer para aperfeiçoa-lo […]. Não se preocupe se parte do código for confusa; o ponto-chave desse programa é que os objetos se comunicam entre si.

Classes:

GuessGame.class

[code]public class GuessGame {
Player p1;
Player p2;
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 pensano em um numero entre 0 e 9...");

 while(true) {
 System.out.println("O numero a adivinhar e "+ targetNumber);
 
 p1.guess();
 p2.guess();
 p3.guess();

 guessp1 = p1.number;
 System.out.println("O jogador um forneceu o palpite " + guessp1);
 guessp2 = p2.number;
 System.out.println("O jogador dois forneceu o palpite " + guessp2);
 guessp3 = p3.number;
 System.out.println("O jogador tres forneceu o palpite " + guessp3);
 
 if (guessp1 == targetNumber) {
 p1isRight = true;
 }
 if (guessp2 == targetNumber) {
 p2isRight = true;
 }
 if (guessp3 == targetNumber) {
 p3isRight = true;
 }
 
 if (p1isRight || p2isRight || p3isRight) {
 System.out.println("Temos um vencendor!");
 System.out.println("O jogador um acertou?" + p1isRight);
 System.out.println("O jogador dois acertou?" + p2isRight);
 System.out.println("O jogador tres acertou?" + p3isRight);
 System.out.println("Fim do jogo");
 break;  // fim do jogo, portanto saia do loop

} else {
// devemos continuar porque nnguem acertou!
System.out.println(“Os jogadores terao que tentar novamente.”);
} // fim de if/else
} // fim do loop
} // fim do metodo
} // fim da classe[/code]
Player.class

[code]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);
}
} [/code]
GameLauncher.class

public class GameLauncher { public static void main (String[] args) { GuessGame game = new GuessGame(); game.startGame(); } }

[color=red]Então galera, a autora só quer demonstrar como os objetos se comunicam entre si, isso que é realmente orientação a objetos (como ela prefere chamar Objetópolis, rs). Para fazer o programa funcionar. Basca compilar as classes. Primeiro GameLauncher.java, em seguida Player.java e por fim GuessGame.java. Após isso, basta rodar o programa GameLauncher.[/color]

Olá, Boa Noite.
A IDE Eclipse é uma excelente ferramenta pra analisar os exemplos do livro.
www.eclipse.org
Nela podes exportar seu exemplo pra um executável(jar), ou mesmo executar na IDE.

PS: Estou desenvolvendo meu projeto integrador no Eclipse, e o T.C.C. também vai sair nele.

Caso ainda não conheça o Eclipse, dá uma estuda nele. Sempre o usei, ao invés do NetBens.

Vlw, até+.

[quote=javatar]e como que eu executo todos juntos para gerar o resultado?
=([/quote]

Ser for por linha de comando, então é só você compilar a classe que contem o método main que ele ira chamar as outras classes para serem compiladas.

Mas se for em um IDE quando você clicar em compilar, build, construir ou seja lá o que a sua IDE utilize para compilar,
todas as classes serão compiladas automaticamente.