Kitabı okuyanlar hatırlayabilir, oop kavramına girildiği yerin başında, GuessGame, Player, GameLauncher diye üç sınıf oluşturup birine main'i, birine bir metot diğerine de asıl kodun yazıldığı küçük programcık.
Neden sonsuz döngüye giriyor anlayamıyorum, kitapta gördüğüm gibi yazdım.
Java:
package guessgame;
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("I'm thinking of a number between 0 and 9...");
while (true) {
System.out.println("Number to guess is " + targetNumber);
p1.guess();
p2.guess();
p3.guess();
guessp1 = p1.number;
System.out.println("Player one guessed " + guessp1);
guessp2 = p2.number;
System.out.println("Player two guessed " + guessp2);
guessp3 = p3.number;
System.out.println("Player three guessed " + guessp3);
if (guessp1 == targetNumber) {
p1isRight = true;
}
if (guessp2 == targetNumber) {
p2isRight = true;
}
if (guessp3 == targetNumber) {
p3isRight = true;
}
if (p1isRight || p2isRight || p3isRight) {
System.out.println("We have a winner!");
System.out.println("Player one got it right? " + p1isRight);
System.out.println("Player two got it right? " + p2isRight);
System.out.println("Player three got it right? " + p3isRight);
System.out.println("Game is over.");
break; // game over, so break out of the loop
} else {
// we must keep going because nobody got it right!
System.out.println("Players will have to try again.");
}}}}
package guessgame;
import java.util.Scanner;
public class GuessGame {
Player p1;
Player p2;
Player p3;
public void startGame() {
Scanner sc = new Scanner(System.in);
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("I'm thinking of a number between 0 and 9...");
while (true) {
System.out.println("Number to guess is " + targetNumber);
//p1.guess();
//p2.guess();
//p3.guess();
System.out.printf("Player 1 write your guess: ");
guessp1 = sc.nextInt();
System.out.printf("\nPlayer 2 write your guess: ");
guessp2 = sc.nextInt();
System.out.printf("\nPlayer 3 write your guess: ");
guessp3 = sc.nextInt();
//guessp1 = p1.number;
System.out.println("Player one guessed " + guessp1);
//guessp2 = p2.number;
System.out.println("Player two guessed " + guessp2);
//guessp3 = p3.number;
System.out.println("Player three guessed " + guessp3);
if (guessp1 == targetNumber) {
p1isRight = true;
}
if (guessp2 == targetNumber) {
p2isRight = true;
}
if (guessp3 == targetNumber) {
p3isRight = true;
}
if (p1isRight || p2isRight || p3isRight) {
System.out.println("We have a winner!");
System.out.println("Player one got it right? " + p1isRight);
System.out.println("Player two got it right? " + p2isRight);
System.out.println("Player three got it right? " + p3isRight);
System.out.println("Game is over.");
break; // game over, so break out of the loop
} else {
// we must keep going because nobody got it right!
System.out.println("Players will have to try again.");
}
}
}
}
Elimde guessgame package olmadığından kodu çalıştıramıyorum lakin bu şekilde denerseniz düzelebilir.
Yine de her şeyi kitaptaki gibi, hatta Youtube'ta da bulduğum bu alıştırmayla ilgili tutorial'leri de kontrol ederek yazdığım halde neden hep sıfır tahmin ediyorlardı orayı anlayamadım ama daha fazla düşünmeyeceğim.
Asıl çözümü buldum. Moderasyon okursa çözüm olarak bu cevabı işaretleyebilir.
Player sınıfının 10. satırındaki;
Kod:
(int)Math.random() * 10;
'da parantezi doğru kullanmadığımdan 0 alıyormuş tahminleri.
Random numara oluşturduktan sonra while bloğunun şartına direkt true girerek kendini bahsettiğiniz sınırsız döngüye alıyor. While bloğunda bu döngünün sonlanmasını sağlayacak herhangi bir komutta yok.
Random numara oluşturduktan sonra while bloğunun şartına direkt true girerek kendini bahsettiğiniz sınırsız döngüye alıyor. While bloğunda bu döngünün sonlanmasını sağlayacak herhangi bir komutta yok.
@riLke Tahminleri method yerine kullanıcıdan alıp dener misiniz? Kısa bir araştırma yaptığımda aynı kütüphaneyi kullanan kişilerin çoğu kullanıcıdan almış girişi.
@riLke Tahminleri method yerine kullanıcıdan alıp dener misiniz? Kısa bir araştırma yaptığımda aynı kütüphaneyi kullanan kişilerin çoğu kullanıcıdan almış girişi.
package guessgame;
import java.util.Scanner;
public class GuessGame {
Player p1;
Player p2;
Player p3;
public void startGame() {
Scanner sc = new Scanner(System.in);
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("I'm thinking of a number between 0 and 9...");
while (true) {
System.out.println("Number to guess is " + targetNumber);
//p1.guess();
//p2.guess();
//p3.guess();
System.out.printf("Player 1 write your guess: ");
guessp1 = sc.nextInt();
System.out.printf("\nPlayer 2 write your guess: ");
guessp2 = sc.nextInt();
System.out.printf("\nPlayer 3 write your guess: ");
guessp3 = sc.nextInt();
//guessp1 = p1.number;
System.out.println("Player one guessed " + guessp1);
//guessp2 = p2.number;
System.out.println("Player two guessed " + guessp2);
//guessp3 = p3.number;
System.out.println("Player three guessed " + guessp3);
if (guessp1 == targetNumber) {
p1isRight = true;
}
if (guessp2 == targetNumber) {
p2isRight = true;
}
if (guessp3 == targetNumber) {
p3isRight = true;
}
if (p1isRight || p2isRight || p3isRight) {
System.out.println("We have a winner!");
System.out.println("Player one got it right? " + p1isRight);
System.out.println("Player two got it right? " + p2isRight);
System.out.println("Player three got it right? " + p3isRight);
System.out.println("Game is over.");
break; // game over, so break out of the loop
} else {
// we must keep going because nobody got it right!
System.out.println("Players will have to try again.");
}
}
}
}
Elimde guessgame package olmadığından kodu çalıştıramıyorum lakin bu şekilde denerseniz düzelebilir.
package guessgame;
import java.util.Scanner;
public class GuessGame {
Player p1;
Player p2;
Player p3;
public void startGame() {
Scanner sc = new Scanner(System.in);
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("I'm thinking of a number between 0 and 9...");
while (true) {
System.out.println("Number to guess is " + targetNumber);
//p1.guess();
//p2.guess();
//p3.guess();
System.out.printf("Player 1 write your guess: ");
guessp1 = sc.nextInt();
System.out.printf("\nPlayer 2 write your guess: ");
guessp2 = sc.nextInt();
System.out.printf("\nPlayer 3 write your guess: ");
guessp3 = sc.nextInt();
//guessp1 = p1.number;
System.out.println("Player one guessed " + guessp1);
//guessp2 = p2.number;
System.out.println("Player two guessed " + guessp2);
//guessp3 = p3.number;
System.out.println("Player three guessed " + guessp3);
if (guessp1 == targetNumber) {
p1isRight = true;
}
if (guessp2 == targetNumber) {
p2isRight = true;
}
if (guessp3 == targetNumber) {
p3isRight = true;
}
if (p1isRight || p2isRight || p3isRight) {
System.out.println("We have a winner!");
System.out.println("Player one got it right? " + p1isRight);
System.out.println("Player two got it right? " + p2isRight);
System.out.println("Player three got it right? " + p3isRight);
System.out.println("Game is over.");
break; // game over, so break out of the loop
} else {
// we must keep going because nobody got it right!
System.out.println("Players will have to try again.");
}
}
}
}
Elimde guessgame package olmadığından kodu çalıştıramıyorum lakin bu şekilde denerseniz düzelebilir.
Yine de her şeyi kitaptaki gibi, hatta Youtube'ta da bulduğum bu alıştırmayla ilgili tutorial'leri de kontrol ederek yazdığım halde neden hep sıfır tahmin ediyorlardı orayı anlayamadım ama daha fazla düşünmeyeceğim.
Asıl çözümü buldum. Moderasyon okursa çözüm olarak bu cevabı işaretleyebilir.
Player sınıfının 10. satırındaki;
Kod:
(int)Math.random() * 10;
'da parantezi doğru kullanmadığımdan 0 alıyormuş tahminleri.