/*Extended the Thread Class
Created and Overrode a .run() method from Thread
Instantiated HugeProblemSolver and called .start() which signifies to start a new thread and search in the class for the .run() method to execute.*/
//CrystalBall
import java.util.Random;
public class CrystalBall extends Thread{
private Question question;
public CrystalBall(Question question){
this.question = question;
}
@Override
public void run() {
ask(this.question);
}
private int getSleepTimeInMs(Question.Difficulty difficulty) {
switch (difficulty) {
case EASY:
return 1000;
case MEDIUM:
return 2000;
case HARD:
return 3000;
default:
return 500;
}
}
private String answer() {
String[] answers = {
"Signs point to yes!",
"Certainly!",
"No opinion",
"Answer is a little cloudy. Try again.",
"Surely.",
"No.",
"Signs point to no.",
"It could very well be!"
};
return answers[new Random().nextInt(answers.length)];
}
private void think(Question question) {
System.out.println("Hmm... Thinking");
try {
Thread.sleep(this.getSleepTimeInMs(question.getDifficulty()));
} catch (Exception e) {
System.out.println(e);
}
System.out.println("Done!");
}
public void ask(Question question) {
System.out.println("Good question! You asked: " + question.getQuestion());
this.think(question);
System.out.println("Answer: " + this.answer());
}
}
//FortuneTeller
import java.util.Arrays;
import java.util.List;
public class FortuneTeller {
public static void main(String[] args) {
List<Question> questions = Arrays.asList(
new Question(Question.Difficulty.EASY, "Am I a good coder?"),
new Question(Question.Difficulty.MEDIUM, "Will I be able to finish this course?"),
new Question(Question.Difficulty.EASY, "Will it rain tomorrow?"),
new Question(Question.Difficulty.EASY, "Will it snow today?"),
new Question(Question.Difficulty.HARD, "Are you really all-knowing?"),
new Question(Question.Difficulty.HARD, "Do I have any hidden talents?"),
new Question(Question.Difficulty.HARD, "Will I live to be greater than 100 years old?"),
new Question(Question.Difficulty.MEDIUM, "Will I be rich one day?"),
new Question(Question.Difficulty.MEDIUM, "Should I clean my room?")
);
questions.stream().forEach(q -> {
CrystalBall c = new CrystalBall(q);
c.start();
});
}
}