0

I am trying to code a number guessing class and client.

The issue/problems I am having with this class/client is that my number guess either ends up too high or too low and in top of that it loops the number twice when it should once.

Number generated from 0 to 100. Wanna take a guess(enter 0 to give up)
Let's take a guess: 
50
40
Your guess is too low

**
What possible change can I make to improve the overall loop or change.**

Here is my code for anyone that wants to look at it.

import java.util.Random;

public class NumberGuess
{

  private Random generator;
  private int Number;


  int intGuess= (1 + (int)(Math.random()*100));
  int numGuess=0;
  boolean isGuessCorrect=false;

public NumberGuess(){
}

int numguess;
public int guess(int guessIn){
int numguess=guessIn;
if(numguess>intGuess){
return 1;
}else if(isGuessCorrect){
return 0;
}else{
return -1;
}
}


public int getNumberofGuesses(){
return numGuess;
}

public boolean gameIsComplete(){
if(isGuessCorrect){
return true;
}else{
return false;
}
}

public void reset(){
intGuess=(1 + (int)(Math.random()*100));
numGuess=0;
isGuessCorrect=false;
}
}

Client class

import java.util.Scanner;

public class NumberGuessclient{
    public static void main(String[] args){


        NumberGuess game1=new NumberGuess();
      Scanner scan = new Scanner(System.in);


        int quit=1;
        while(quit != 0){
            System.out.println("Number generated from 0 to 100. Wanna take a guess(enter 0 to give up)");
            System.out.println("Let's take a guess: ");

            int guess1= scan.nextInt();


            while((guess1 != 0)||(!game1.gameIsComplete())){
                guess1 = scan.nextInt();
                if(game1.guess(guess1)==1){
                    System.out.println("Your guess is too high");
                }

                 else if(game1.guess(guess1)==-1){
                    System.out.println("Your guess is too low");
                }
                else{
                    System.out.println("guessed in " + game1.getNumberofGuesses() + " tries");
                }
            }
            System.out.println("Enter 1 for new game, 0 to quit: ");
            quit = scan.nextInt();
            if(quit==1){
                game1.reset();
            }
        }
    }

}

source code for more ELABORATION if not clarified above.

NumberGuess Class:

The NumberGuess class will facilitate a number guessing game. The constructor should generate a random number, saving the number in a private class field. The class should also define a method which accepts a "guess", compares the "guess" to the randomly generated number, and returns one of the following:

•   -1 the guess was less than the secret number
•    0 the guess matched the secret number
•    1 the guess was higher than the secret number 

Determine whether other methods, constructors or otherwise, would be useful for this class.

The Java API defines a Random class for generating random numbers. The class can be reviewed in the API or in your textbook beginning on page 250. Consider limiting the range of the random number. For instance, a number between 0 and 100.

Client Application:

The client application allows the end-user to play the number guessing game. Below is a sample run. Your application does not need to match.
I'm thinking of a number between 0 and 100. Can you guess it?

Take a guess: 50
Your guess is too high
Another guess? (Y or N): y
Take a guess: 25
Your guess is too high
Another guess? (Y or N): y
Take a guess: 10
Your guess is too low
Another guess? (Y or N): y
Take a guess: 15
Your guess is too low
Another guess? (Y or N): y
Take a guess: 18
Your guess is too low
Another guess? (Y or N): y
Take a guess: 20
Congratulations! You correctly guessed the secret number in 6 tries.
2
Contributors
1
Reply
2
Views
4 Years
Discussion Span
Last Post by stultuske
0
int guess1= scan.nextInt();
while((guess1 != 0)||(!game1.gameIsComplete())){
guess1 = scan.nextInt();

that's why you have to enter two numbers as a guess.
replace it by:

int guess1= 1;

while((guess1 != 0)||(!game1.gameIsComplete())){
 guess1 = scan.nextInt();

that way, it will run the first time, since guess1 != 0, but you won't have to enter the value manually,
and since the value is askes within the while anyway..

check this piece of your code:

public int guess(int guessIn){
int numguess=guessIn;
if(numguess>intGuess){
return 1;
}else if(isGuessCorrect){
return 0;
}else{
return -1; 
}
 }

that is the only method in your NumberGuess you are using, after instantiating it. since you are never changing the value of isGuessCorrect, it will always remain false, hence your application will never return 0.

Edited by stultuske: EDIT: not used to the new editor yet

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.