2

A sample program for two players. Player 1 enter the secret number (range 0-100). Player 2 guess that number. If that guess is higher or lower, output a message. If player 2 guesses it right, output a congratulation message and number of guesses. Here what I got so far.

import java.util.Scanner;
public class GuessingGame 
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int number;

    System.out.println("Player 1 enter secret number (range 0 - 100): ");
    number = input.nextInt();

    int guess = 0;
    int tries = 0;

    while(guess != number)
    {
        tries = tries + 1;

        System.out.print("Player 2 enter your guess (range 0 - 100): ");
        guess = input.nextInt();
        if (guess > number)
        {
            System.out.printf("Your guess is higher than the correct number\n");
        }
        else if (guess < number)
        {
            System.out.printf("Your guess is lower than the correct number\n");
        }
        else if (guess == number)
        {
            System.out.printf("Congratulations! You guess the correct number\n");
            System.out.printf("Number of guesses: %d\n", tries);
            break;
        }
    }
}

}

My questions are: How do I hide the secret number that player#1 entered, so player#2 can not see? How do I limit the range of secret number from 0 to 100. I used code below right after the input of player#1. But then, it still show up the input for player#2 right after that.

if (number < 0)
System.out.print("Please enter number greater than 0");
if (number > 100)
System.out.print("Please enter number smaller than 100");

Anyone please help me! I'm using NetBeans.

Jin Nguyen
  • 45
  • 10
  • Create a var with a random number? http://stackoverflow.com/questions/363681/generating-random-integers-in-a-range-with-java – Stuart Siegler Feb 16 '15 at 00:05
  • Replace the `System.in` stream without your own which doesn't echo the characters to the screen...been a while, might not work anywork... – MadProgrammer Feb 16 '15 at 00:18

2 Answers2

1

You can use JOptionPane(Dialogs) so player 1 enter the secret number.

For example:

    String input=JOptionPane.showInputDialog(null,"Player 1 enter secret number (range 0 - 100): ");
    int number=Integer.parseInt(input);

See here more about Dialogs http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

crAlexander
  • 376
  • 1
  • 2
  • 12
1

You can clear the console right after the first player chooses a value using the method below:

public final static void clearConsole()
{
    try
    {
        final String os = System.getProperty("os.name");

        if (os.contains("Windows"))
        {
            Runtime.getRuntime().exec("cls");
        }
        else
        {
            Runtime.getRuntime().exec("clear");
        }
    }
    catch (final Exception e)
    {
        //  Handle any exceptions.
    }
}

Now you can change your code to:

import java.util.Scanner;
public class GuessingGame 
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int number;

    do {
    System.out.println("Player 1 enter secret number (range 0 - 100): ");
    number = input.nextInt();
    }while (number < 0 || number > 100);
    clearConsole();

    int guess = 0;
    int tries = 0;

    while(guess != number)
    {
        tries = tries + 1;

        System.out.print("Player 2 enter your guess (range 0 - 100): ");
        guess = input.nextInt();
        if (guess > number)
        {
            System.out.printf("Your guess is higher than the correct number\n");
        }
        else if (guess < number)
        {
            System.out.printf("Your guess is lower than the correct number\n");
        }
        else if (guess == number)
        {
            System.out.printf("Congratulations! You guess the correct number\n");
            System.out.printf("Number of guesses: %d\n", tries);
            break;
        }
    }
}

Edited to include number range check.

David.Jones
  • 1,413
  • 8
  • 16