I have a code where in my class I would like to be able to call the method answer twice like qns.answer(5).answer(7)
. But right now when I call the method answer as below, I get the error cannot find symbol.
For example:
Question qns = new Question("How many apples are there in the bag?") qns ==> How many apples are there in the bag?: My answer is 0. qns.answer(12) ==> How many apples are there in the bag?: My answer is 12. qns.answer(12).answer(4) ==> How many apples are there in the bag?: My answer is 4. qns qns ==> How many apples are there in the bag?: My answer is 0.
class Question { private final String question; private final int correctAns; public Question(String question, int correctAns) { this.question = question; this.correctAns = correctAns } public String answer(int myAns) { return String.format("%s: My answer is %d.", this.question, myAns); } @Override public String toString() { return String.format("%s: My answer is 0.", this.question); } }
Would appreciate if you could kindly give some pointers on how to get around this.
Advertisement
Answer
Question
can have an extra field to store the answer, and you can also write a new constructor to initialise that field.
private final int currentAns; public Question(String question, int correctAns, int currentAns) { this.question = question; this.correctAns = correctAns; this.currentAns = currentAns; } public Question(String question, int correctAns) { this(question, correctAns, 0); } // toString can now use currentAns! @Override public String toString() { return String.format("%s: My answer is %d.", this.question, currentAns); }
Then in the answer
method, you can return a new Question
with the specified answer as currentAns
:
public Question answer(int myAns) { return new Question(question, correctAns, myAns); }
Now you can chain multiple ans
calls. If toString
is called at the end of it (whether implicitly or explicitly), you can get the desired string.
Example in JShell:
jshell> Question qns = new Question("How many apples are there in the bag?", 1); qns ==> How many apples are there in the bag?: My answer is 0. jshell> qns.answer(12); $7 ==> How many apples are there in the bag?: My answer is 12. jshell> qns.answer(12).answer(4); $8 ==> How many apples are there in the bag?: My answer is 4. jshell> qns qns ==> How many apples are there in the bag?: My answer is 0.