Post on 17-Dec-2015
1
BUILDING JAVA PROGRAMSCHAPTER 5RANDOM CLASS
2
THE RANDOM CLASS• A Random object generates pseudo-random* numbers.
• Class Random is found in the java.util package.
import java.util.*;
• Example:
Random rand = new Random();
int randomNumber = rand.nextInt(10); // 0-9
Method name Description
nextInt() returns a random integer
nextInt(max) returns a random integer in the range [0, max)in other words, 0 to max-1 inclusive
nextDouble() returns a random real number in the range [0.0, 1.0)
3
GENERATING RANDOM NUMBERS•Common usage: to get a random
number from 1 to Nint n = rand.nextInt(20) + 1; // 1-20
inclusive
• To get a number in arbitrary range [min, max] inclusive:
nextInt(size of range) + min
•where (size of range) is (max - min + 1)
• Example: A random integer between 4 and 10 inclusive:
int n = rand.nextInt(7) + 4;
4
RANDOM QUESTIONS•Given the following declaration, how would you get:
Random rand = new Random();
• A random number between 1 and 100 inclusive?
int random1 = rand.nextInt(100) +
1;
• A random number between 50 and 100 inclusive?
int random2 = rand.nextInt(51) +
50;
• A random number between 4 and 17 inclusive?
int random3 = rand.nextInt(14) + 4;
5
RANDOM AND OTHER TYPES• nextDouble method returns a double
between 0.0 - 1.0
• Example: Get a random GPA value between 1.5 and 4.0:
double randomGpa = rand.nextDouble() *
2.5 + 1.5;
• Any set of possible values can be mapped to integers• code to randomly play Rock-Paper-Scissors:
int r = rand.nextInt(3);if (r == 0) { System.out.println("Rock");} else if (r == 1) {
System.out.println("Paper");} else {
System.out.println("Scissors");}
6
RANDOM QUESTION
• Write a program that simulates rolling of two 6-sided dice until their combined result comes up as 7.
2 + 4 = 63 + 5 = 85 + 6 = 111 + 1 = 24 + 3 = 7You won after 5 tries!
• Modify the program to play 3 dice games using a method.
7
RANDOM ANSWER// Rolls two dice until a sum of 7 is reached.
import java.util.*;
public class Dice {
public static void main(String[] args) {
Random rand = new Random();
int tries = 0;
int sum = 0;
while (sum != 7) {
// roll the dice once
int roll1 = rand.nextInt(6) + 1;
int roll2 = rand.nextInt(6) + 1;
sum = roll1 + roll2;
System.out.println(roll1 + " + " + roll2 + " = " + sum);
tries++;
}
System.out.println("You won after " + tries + " tries!");
}
}
8
RANDOM QUESTION• Write a multiplication tutor program.
• Ask user to solve problems with random numbers from 1-20.• The program stops after an incorrect answer.
14 * 8 = 112Correct!5 * 12 = 60Correct!8 * 3 = 24Correct!5 * 5 = 25Correct!20 * 14 = 280Correct!19 * 14 = 256Incorrect; the answer was 266
You solved 5 correctlyLast correct answer was 280
• The last line should not appear if the user solves 0 correctly.
9
RANDOM ANSWER
import java.util.*;
// Asks the user to do multiplication problems and scores them.
public class MultiplicationTutor {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
Random rand = new Random();
// fencepost solution - pull first question outside of loop
int correct = 0;
int last = askQuestion(console, rand);
int lastCorrect = 0;
// loop until user gets one wrong
while (last > 0) {
lastCorrect = last;
correct++;
last = askQuestion(console, rand);
}
System.out.println("You solved " + correct + " correctly");
if (correct > 0) {
System.out.println("Last correct answer was " + lastCorrect);
}
}
...
10
RANDOM ANSWER 2
...
// Asks the user one multiplication problem,
// returning the answer if they get it right and 0 if not.
public static int askQuestion(Scanner console, Random rand) {
// pick two random numbers between 1 and 20 inclusive
int num1 = rand.nextInt(20) + 1;
int num2 = rand.nextInt(20) + 1;
System.out.print(num1 + " * " + num2 + " = ");
int guess = console.nextInt();
if (guess == num1 * num2) {
System.out.println("Correct!");
return num1 * num2;
} else {
System.out.println("Incorrect; the correct answer was " +
(num1 * num2));
return 0;
}
}
}