package multdrill; /** * @author Jeff Offutt * Date: June, 2011 */ import java.io.*; import java.util.*; /* A multiplication Problem has three fields: * left -- left hand side (int) * right -- right hand side (int) * actualAnswer -- computed answer (int) * userAnswer -- answer from the user, initially -1 (int) */ public class Problem { private int left; private int right; private int actualAnswer; private int userAnswer; private String errMsg; public Problem () { left = 0; right = 0; actualAnswer = 0; userAnswer = -1; errMsg = ""; } public Problem (int l, int r) { left = l; right = r; actualAnswer = left * right; userAnswer = -1; errMsg = ""; } // set and get userAnswer public void setUserAnswer (int ans) { userAnswer = ans; checkAnswer(); } public void setUserAnswer (String ans) { // Passed a string, check and convert if (ans != null && ans.length() != 0) { // Convert to integer if not null. try { userAnswer = (Integer.parseInt (ans)); checkAnswer(); } catch (NumberFormatException ex) { userAnswer = -1; errMsg = "Sorry, I only understand numbers."; } } } public int getUserAnswer() { return userAnswer; } //get left public int getLeft() { return left; } //get right public int getRight() { return right; } //get actualAnswer public int getActualAnswer() { return actualAnswer; } //get error public String getErrMsg() { return errMsg; } // Check the answer private void checkAnswer() { // called from setUserAnswer() int tmp; if (userAnswer == actualAnswer) { errMsg = "Great, " + userAnswer + " is right!"; } else if (userAnswer == left*right-1 || userAnswer == left*right+1) { errMsg = "Close, but your answer is one number off."; } else if (userAnswer == left+right) { errMsg = "Close, but did you add the numbers instead of multiply?"; } else if (userAnswer == left-right) { errMsg = "Close, but did you subtract the numbers instead of multiply?"; } else if (userAnswer == left*(right+1)) { tmp = right+1; errMsg = "Close, but did you multiply " + left + " * " + tmp + " instead of " + left + " * " + right + "?"; } else if (userAnswer == left*(right-1)) { tmp = right-1; errMsg = "Close, but did you multiply " + left + " * " + tmp + " instead of " + left + " * " + right + "?"; } else if (userAnswer == (left+1)*right) { tmp = left+1; errMsg = "Close, but did you multiply " + tmp + " * " + right + " instead of " + left + " * " + right + "?"; } else if (userAnswer == (left-1)*right) { tmp = left-1; errMsg = "Close, but did you multiply " + tmp + " * " + right + " instead of " + left + " * " + right + "?"; } else { errMsg = "Sorry, that is not the correct answer."; } } }