Reputation: 43
I missed points for putting implementation in the driver class, rather than having the driver class only make calls methods in other classes. I'm not sure how to move the implementation outside of the main class. Suggestions welcome!
/*
*Deitel Chapter 6 Exercise 6.30
*/
package guess;
import java.util.Scanner;
/**
*Driver class for number guessing game
*/
public class GuessDriver {
/**
*
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
/*
*instantiate guess class
*/
Guess Guess = new Guess();
/*
*loops program until user guesses correct number
*/
while (Guess.getGuess() != Guess.secretNumber){
/*
*takes input from user
n*/
System.out.println("Enter a number from 1 to 1000: ");
int setGuess = input.nextInt();
Guess.setGuess(setGuess);
/*
*nested if-else statements compares guess against secret number
*/
if(Guess.secretNumber < Guess.guess){
System.out.println("too high");
} else if (Guess.secretNumber > Guess.guess){
System.out.println("too low");
} else {
System.out.println("Congratulations, you win!");
}
}
}
}
/*
*Deitel Chapter 6 Exercise 6.30
*/
package guess;
import java.util.Random;
/**
* Takes in and stores an integer, sets value for random number
*/
public class Guess {
/**
*instance variable
*/
public int guess;
/**
*instance variable
*/
public int secretNumber = (int) (Math.random() * 999 + 1);
/**
*return secret number
* @return
*/
public int getSecretNumber() {
return secretNumber;
}
/**
*return guess
* @return
*/
public int getGuess() {
return guess;
}
/**
*set guess
* @param guess
*/
public void setGuess(int guess) {
this.guess = guess;
}
}
Upvotes: 1
Views: 417
Reputation: 41
Well, first of all. I would suggest to make private all variables of the Guess class. (See that you have a getSecretNumber() method that already gives you the value of the secretNumber variable.
Secondly, you could create a public method like checkGuessing(int guess) in the Guess class. This method would take the user input, and write the answer on console ("too high", "too low", and so on). Another option could be to add this same functionality to the setGuess method.
Finally, to ease future debugging, you should name the classes with Uppercase letters, the variables (even the instances of classes) with camelCase letters, and try that class's variables be named different than the name of the class.
So the final code could be something like this: in GuessDriver class:
package guessdriver;
import java.util.Scanner;
/**
*Driver class for number guessing game
*/
public class GuessDriver {
/**
*
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
/*
*instantiate guess class
*/
Guess guess = new Guess();
/*
*loops program until user guesses correct number
*/
while (guess.checkGuessing()==false){
/*
*takes input from user
n*/
System.out.println("Enter a number from 1 to 1000: ");
int setGuess = input.nextInt();
guess.setGuess(setGuess);
}
}
}
And in the Guess class:
package guessdriver;
public class Guess {
/**
*instance variable
*/
private int guessing;
/**
*instance variable
*/
private int secretNumber = (int) (Math.random() * 999 + 1);
/**
*return secret number
* @return
*/
public int getSecretNumber() {
return secretNumber;
}
/**
*return guess
* @return
*/
public int getGuess() {
return guessing;
}
/**
*set guess
* @param guess
*/
public void setGuess(int guessing) {
this.guessing = guessing;
}
public boolean checkGuessing(){
if(secretNumber < guessing){
System.out.println("too high");
return false;
} else if (secretNumber > guessing){
System.out.println("too low");
return false;
} else {
System.out.println("Congratulations, you win!");
return true;
}
}
}
Upvotes: 1