In: Computer Science
Write a Java class called GuessMyNumber that prompts the user for an integer n, tells the user to think of a number between 0 and n−1, then makes guesses as to what the number is.
After each guess, the program must ask the user if the number is lower, higher, or correct. You must implement the divide-and-conquer algorithm from class. In particular, you should round up when the middle of your range is in between two integers.
(For example, if your range is 0 to 31, you should guess 16 and not 15, but if your range is 0 to 30 you should certainly guess 15).
The flow should look like the following:
Enter n: 32
Welcome to Guess My Number!
Please think of a number between 0 and 31.
Is your number: 16?
Please enter C for correct, H for too high, or L for too low.
Enter your response (H/L/C):
H Is your number: 8?
Please enter C for correct, H for too high, or L for too low.
Enter your response (H/L/C): L
Is your number: 12?
Please enter C for correct, H for too high, or L for too low.
Enter your response (H/L/C): C
Thank you for playing Guess My Number!
As part of your implementation, you should check that n is not 0 or negative. (You need not worry about the case where the user enters a non-integer). You should also check that the user is entering one of the letters H, L, or C each time your program makes a guess. This flow should look like the following: Enter n: -1
Enter a positive integer for n: 32
Welcome to Guess My Number!
Please think of a number between 0 and 31.
Is your number: 16?
Please enter C for correct, H for too high, or L for too low.
Enter your response (H/L/C): asdf
Enter your response (H/L/C): H Is your number: 8? ...
You can assume that the user will always give honest answers.
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
System.out.println("Enter n:
");
int n = s.nextInt();
while(n<=0)
{
System.out.println("Enter a
positive integer for n: ");
n = s.nextInt();
}
System.out.println("Welcome to
Guess My Number!");
System.out.println("Please think of
a number between 0 and "+(n-1)+".");
int low=0,high=n-1;
String c;
int guess;
do
{
guess =
(int)Math.ceil(((low+high)/2)+0.5);
System.out.println("Is your number:
"+guess+"?");
System.out.println("Please enter C
for correct, H for too high, or L for too low.");
System.out.println("Enter your
response (H/L/C): ");
c=s.next();
while(!(c.equals("H")||c.equals("L")||c.equals("C")))
{
s.next();
System.out.println("Enter your
response (H/L/C): ");
c=s.next();
}
if(c.equals("H"))
{
high=(low+high)/2;
}
else if(c.equals("L"))
{
low=(low+high)/2;
}
}while(!c.equals("C")&&guess!=0&&guess!=n-1);
System.out.println("Thank you for
playing Guess My Number!");
}
}
OUTPUT:
Enter n:
32
Welcome to Guess My Number!
Please think of a number between 0 and 31.
Is your number: 16?
Please enter C for correct, H for too high, or L for too low.
Enter your response (H/L/C):
H
Is your number: 8?
Please enter C for correct, H for too high, or L for too low.
Enter your response (H/L/C):
L
Is your number: 12?
Please enter C for correct, H for too high, or L for too low.
Enter your response (H/L/C):
C
Thank you for playing Guess My Number!