Revision: 31125
Updated Code
at August 30, 2010 16:06 by Sverri
Updated Code
import java.util.ArrayList; import java.util.Scanner; public class GuessNumber { public static short range; public static ArrayList<Integer> collection = new ArrayList<Integer>(); public static void main(String args[]) { // We need a range System.out.print("\nI need a range from 0 to 32,767.\n\nPlease choose a number: "); // Get and populate the range Scanner input = new Scanner(System.in); range = input.nextShort(); range = (range == 0) ? 1 : range; for (int i=0; i<=range; i++) collection.add(i); // A few ground rules System.out.printf("\nNow pick a number in the range 0 to %s and remember\n", range); System.out.println("it. I will then try to guess the number you chose.\n"); System.out.println("Answer \"yes\" or \"no\" to the questions.\n\n---"); // Keep asking as long as found is false boolean found = false; while ( ! found) { // Get the size of the collection int size = collection.size(); // As long as there are two or more numbers left if (size > 2) { // The centre index int centre = size / 2; int theNumber = collection.get(centre); // Default question System.out.printf("\nIs your number less than %s? ", theNumber); // Evaluate input String answer = input.next(); if (answer.equals("yes") || answer.equals("1")) delete(theNumber, true); else if (answer.equals("no") || answer.equals("0")) delete(theNumber, false); else { error(answer); found = true; } // If only one number is left then we are done. if (collection.size() == 1) { int num = collection.get(0); answer(num); found = true; } } // Otherwise there are now 2 values in the array. else { // Get the two values int num1 = collection.get(0); int num2 = collection.get(1); // Ask question and get answer System.out.print("\nIs your number greater than " + num1 + "? "); String answer = input.next().trim().toLowerCase(); // Resolve answer if (answer.equals("yes") || answer.equals("1")) { answer(num2); found = true; } else if (answer.equals("no") || answer.equals("0")) { answer(num1); found = true; } else { error(answer); found = true; } } } } // Deletes numbers less or greater than n public static void delete(int n, boolean lt) { // Create a temporary collection ArrayList<Integer> newCollection = new ArrayList<Integer>(); // Add numbers lesser than n if (lt) { for (int i:collection) if(i<n) newCollection.add(i); } // Add numbers greater than n else { n=n-1; for (int i:collection) if(i>n) newCollection.add(i); } // Replace the collection with the new one collection = newCollection; } // The answer public static void answer(int num) { System.out.println("\n---\n\nThen your number is: " + num); System.out.println("\nThank you for playing! To play again press the Up arrow"); System.out.println("on your keyboard and then Enter.\n\nHave a nice day :)"); } // An error public static void error(String answer) { System.out.printf("\nI am a machine. I do not understand \"%s\"...\n", answer); System.out.println("\nTo play again press the Up arrow on your keyboard and then Enter."); } }
Revision: 31124
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 30, 2010 16:05 by Sverri
Initial Code
import java.util.ArrayList; import java.util.Scanner; public class GuessNumber { public static short range; public static ArrayList<Integer> collection = new ArrayList<Integer>(); public static void main(String args[]) { // We need a range System.out.print("\nI need a range from 0 to 32,767.\n\nPlease choose a number: "); // Get and populate the range Scanner input = new Scanner(System.in); range = input.nextShort(); range = (range == 0) ? 1 : range; for (int i=0; i<=range; i++) collection.add(i); // A few ground rules System.out.printf("\nNow pick a number in the range 0 to %s and remember\n", range); System.out.println("it. I will then try to guess the number you chose.\n"); System.out.println("Answer \"yes\" or \"no\" to the questions.\n\n---"); // Keep asking as long as found is false boolean found = false; while ( ! found) { // Get the size of the collection int size = collection.size(); // As long as there are two or more numbers left if (size > 2) { // The centre index int centre = size / 2; int theNumber = collection.get(centre); // Default question System.out.printf("\nIs your number less than %s? ", theNumber); // Evaluate input String answer = input.next(); if (answer.equals("yes") || answer.equals("1")) delete(theNumber, true); else if (answer.equals("no") || answer.equals("0")) delete(theNumber, false); else { error(answer); found = true; } // If only one number is left then we are done. if (collection.size() == 1) { int num = collection.get(0); answer(num); found = true; } } // Otherwise there are now 2 values in the array. else { // Get the two values int num1 = collection.get(0); int num2 = collection.get(1); // Ask question and get answer System.out.print("\nIs your number greater than " + num1 + "? "); String answer = input.next().trim().toLowerCase(); // Resolve answer if (answer.equals("yes") || answer.equals("1")) { answer(num2); found = true; } else if (answer.equals("no") || answer.equals("0")) { answer(num1); found = true; } else { error(answer); found = true; } } } } // Deletes numbers less or greater than n public static void delete(int n, boolean lt) { // Create a temporary collection ArrayList<Integer> newCollection = new ArrayList<Integer>(); // Add numbers lesser than n if (lt) { for (int i:collection) if(i<n) newCollection.add(i); } // Add numbers greater than n else { n=n-1; for (int i:collection) if(i>n) newCollection.add(i); } // Replace the collection with the new one collection = newCollection; } // The answer public static void answer(int num) { System.out.println("\n---\n\nThen your number is: " + num); System.out.println("\nThank you for playing! To play again press the Up arrow"); System.out.println("on your keyboard and then Enter.\n\nHave a nice day :)"); } // An error public static void error(String answer) { System.out.printf("\nI am a machine. I do not understand \"%s\"...\n", answer); System.out.println("\nTo play again press the Up arrow on your keyboard and then Enter."); } }
Initial URL
Initial Description
The player selects a range from 0 to n, remembers a number in this range and then the script asks the player a question trying to guess the number. The PC will always guess the correct number.\r\n\r\nI could have added more varied questions, but the task did not state it had to be interesting, and being a lazy creature I took the path of least résistance.
Initial Title
PC Guesses Remembered Number
Initial Tags
number
Initial Language
Java