Issue
Here is the code I'm given:
import java.util.Scanner;
import java.util.Random;
public class LabProgram {
/* Define your method here */
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
Random rand = new Random(2); // Unique seed
// Add more variables as needed
/* Type your code here. */
}
}
I cannot make CHANGES to the code, only add things to it. My instructions are:
Write a program that simulates flipping a coin to make decisions. The input is how many decisions are needed, and the output is either heads or tails. Assume the input is a value greater than 0.
Ex: If the input is:
3 the output is:
tails heads tails
For reproducibility needed for auto-grading, seed the program with a value of 2. In a real program, you would seed with the current time. In that case, every program's output would be different, which is what is desired but can't be auto-graded.
Note: A common student mistake is to create an instance of Random before each call to rand.nextInt(). But seeding should only be done once, at the start of the program, after which rand.nextInt() can be called any number of times.
Your program must define and call the following method that randomly picks 0 or 1 and returns "heads" or "tails". Assume the value 0 represents "heads" and 1 represents "tails". public static String headsOrTails(Random rand)
Here is what I have:
import java.util.Scanner;
import java.util.Random;
public class LabProgram {
public static String headsOrTails(Random rand) {
rand.nextInt();
if (rand.equals(0)) {
return "heads";
}
else {
return "tails";
}
}
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
Random rand = new Random(2); // Unique seed
int userNum = scnr.nextInt();
for (int i = 0; i < userNum; i++) {
System.out.println(headsOrTails(rand));
}
}
}
When executing the code, I get tails tail tails, every time.
Solution
The Random package can actually return a random boolean value. If you pass 2
when you create the Random object, you'll always get the same sequence. To avoid that, pass in the current Unix time:
import java.util.Scanner;
import java.util.Random;
class LabProgram {
public static String headsOrTails(Random rand) {
boolean r = rand.nextBoolean();
if (r) {
return "heads";
}
else {
return "tails";
}
}
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
Random rand = new Random(System.currentTimeMillis()); // Unique seed
int userNum = scnr.nextInt();
for (int i = 0; i < userNum; i++) {
System.out.println(headsOrTails(rand));
}
}
}
Answered By - CryptoFool
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.