Skip to main content
Code Review

Return to Question

replaced http://codereview.stackexchange.com/ with https://codereview.stackexchange.com/
Source Link

Original question can be found here here

Original question can be found here

Original question can be found here

Source Link
Nilzone-
  • 1.5k
  • 2
  • 15
  • 28

Guess how many are in the jar game in Java - Take 2

Original question can be found here

I took the advice I got to heart, and re-wrote it. Once again I'd appreciate any advice as to how I can improve this using best practices.

Jar.java

package com.tn.jar;
public class Jar {
 private String itemName;
 private int numberOfItems;
 private int numberToGuess;
 private int numberOfGuesses;
 
 /*
 * Default constructor 
 */
 
 public Jar() {
 this.numberOfGuesses = 0;
 }
 
 /*
 * Getters
 */
 
 public String getItemName() {
 return itemName;
 }
 public void setItemName(String itemName) {
 this.itemName = itemName;
 }
 public int getNumberOfItems() {
 return numberOfItems;
 }
 public void setNumberOfItems(int numberOfItems) {
 this.numberOfItems = numberOfItems;
 }
 public int getNumberToGuess() {
 return numberToGuess;
 }
 /*
 * Setters
 */
 public void setNumberToGuess(int numberToGuess) {
 this.numberToGuess = numberToGuess;
 }
 public int getNumberOfGuesses() {
 return numberOfGuesses;
 }
 public void setNumberOfGuesses(int numberOfGuesses) {
 this.numberOfGuesses = numberOfGuesses;
 }
 public void incrementNumberOfGuesses() {
 numberOfGuesses++;
 }
}

Prompter.java

package com.tn.jar;
import java.util.Random;
import java.util.Scanner;
public class Prompter {
 private Jar jar;
 private Scanner scanner;
 
 /*
 * Public constructor
 */
 
 public Prompter(Jar jar) {
 this.jar = jar;
 this.scanner = new Scanner(System.in);
 }
 
 
 /*
 * Method that actually starts the game
 */
 
 public void play() {
 adminSetup();
 playerSetup();
 }
 
 /*
 * Admin setup
 */
 
 private void adminSetup() {
 printTitle("Administrator setup");
 setupGame();
 }
 
 /*
 * Player setup
 */
 
 private void playerSetup() {
 printTitle("Player");
 
 gameExplanation();
 areYouReady();
 getGuess();
 }
 
 /* 
 * Setup game.
 * The user is prompted with a couple of questions for filling the jar instance. 
 */
 
 private void setupGame() {
 String itemName = askQuestion("Name of items in the jar: "); 
 String numberOfItems = askQuestion("Maximum of lentils in the jar: ");;
 
 while(isNan(numberOfItems)) {
 numberOfItems = askQuestion("Maximum of lentils in the jar: ");
 }
 
 jar.setItemName(itemName);
 jar.setNumberOfItems(Integer.parseInt(numberOfItems));
 jar.setNumberToGuess(new Random().nextInt(Integer.parseInt(numberOfItems)) + 1);
 
 }
 
 /*
 * User must confirm whether or not he is ready to play before the game starts.
 */
 
 private void areYouReady() {
 do {
 System.out.print("Ready? (press ENTER to start guessing): "); 
 } while (scanner.nextLine().length( ) > 0);
 }
 
 
 
 /*
 * The user can guess the answer. It will loop until the answer is correct.
 */
 private void getGuess() {
 do {
 System.out.print("Guess: ");
 jar.incrementNumberOfGuesses();
 
 } while(guess() != jar.getNumberToGuess());
 
 printResult();
 }
 
 /*
 * Utility method for getting the users guess
 */
 
 private int guess() {
 String answer = scanner.nextLine();
 
 while(isNan(answer)) {
 System.out.print("Guess: ");
 answer = scanner.nextLine();
 }
 
 return Integer.parseInt(answer);
 }
 
 /*
 * Some explanation before the game starts.
 */
 
 private void gameExplanation() {
 System.out.printf("Your goal is to guess how many lentils are in the jar. Your guess should be between 1 and %d%n", jar.getNumberOfItems());
 }
 
 /*
 * Utility method that accepts input.
 */
 
 private String askQuestion(String question) {
 System.out.print(question);
 String result = scanner.nextLine();
 return result;
 }
 
 /*
 * Utility method for printing out headers
 */
 
 private void printTitle(String title) {
 System.out.printf("%n%s%n=========================%n%n", title.toUpperCase());
 }
 
 /*
 * When the user answers correctly, he recieves the game stats. 
 */
 private void printResult() {
 System.out.printf("%nCongratulations - you guessed that there are %d" + 
 " lentils in the jar! It took you %d" + 
 " guess(es) to get it right.%n", jar.getNumberToGuess(), jar.getNumberOfGuesses());
 }
 
 /*
 * Utility method for checking if the string read by the system can be parsed as an integer
 */
 
 private static boolean isNan(String string) {
 try {
 Integer.parseInt(string);
 } catch(NumberFormatException nfe) {
 return true;
 }
 
 return false;
 }
}

Game.java

package com.tn.jar;
public class Game {
 
 
 public static void main(String[] args) {
 Jar jar = new Jar();
 Prompter prompter = new Prompter(jar);
 
 prompter.play();
 };
}
lang-java

AltStyle によって変換されたページ (->オリジナル) /