Quote (Kagura @ Apr 4 2014 09:28pm)
Your solution seemed a lot more complex than it needs to be.
Well then you should see mine. Dependency injection and factory patterns oh snap:
Code
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TutorApplet extends JApplet
{
private JPanel contentPane;
private JTextField answerField;
private JLabel questionField, responseField;
private Tutor tutor;
public TutorApplet(Tutor tutor)
{
this.tutor = tutor;
}
public void init()
{
contentPane = new JPanel();
contentPane.setLayout(new FlowLayout());
answerField = new JTextField("",2);
answerField.setEditable(true);
answerField.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
int answer = Integer.parseInt(answerField.getText());
String response = tutor.judgeExpression(answer);
answerField.setText("");
questionField.setText(tutor.getMultiplicationExpression().toString());
responseField.setText(response);
}});
questionField = new JLabel(tutor.getMultiplicationExpression().toString());
responseField = new JLabel("");
contentPane.add(questionField);
contentPane.add(answerField);
contentPane.add(responseField);
this.setContentPane(contentPane);
}
}
Code
public abstract class Tutor
{
protected MultiplicationExpression exp;
protected MultiplicationExpressionFactory factory;
public Tutor(MultiplicationExpressionFactory factory)
{
this.factory = factory;
exp = factory.createMultiplicationExpression();
}
public MultiplicationExpression getMultiplicationExpression()
{
return exp;
}
public abstract String judgeExpression(int answer);
}
Code
public class MultiplicationExpression
{
protected int multiplicand, multiplier;
protected RandomNumberGenerator rng;
public MultiplicationExpression(RandomNumberGenerator rng)
{
this.rng = rng;
multiplicand = rng.getRandomNumber();
multiplier = rng.getRandomNumber();
}
public int getAnswer()
{
return multiplicand * multiplier;
}
}
Code
public interface RandomNumberGenerator
{
public int getRandomNumber();
}
Code
public interface MultiplicationExpressionFactory {
public MultiplicationExpression createMultiplicationExpression();
}
Code
public class MinkoTutorMultiplicationExpressionFactory implements MultiplicationExpressionFactory {
public MultiplicationExpression createMultiplicationExpression()
{
return new MinkoTutorMultiplicationExpression();
}
}
Code
public class MinkoTutorMultiplicationExpression extends MultiplicationExpression
{
public MinkoTutorMultiplicationExpression()
{
super(new MinkoTutorRandomNumberGenerator());
}
public String toString()
{
return String.format("How much is %d times %d?",multiplicand,multiplier);
}
}
Code
public class MinkoTutor extends Tutor{
public MinkoTutor()
{
super(new MinkoTutorMultiplicationExpressionFactory());
}
public String judgeExpression(int answer)
{
boolean result = answer == exp.getAnswer();
if(result) exp = factory.createMultiplicationExpression();
return result ? "Good Job!" : "Try Again!";
}
}
Code
public class MinkoTutorApplet extends TutorApplet
{
public MinkoTutorApplet()
{
super(new MinkoTutor());
}
}
Code
public class MinkoTutorRandomNumberGenerator implements RandomNumberGenerator
{
public int getRandomNumber()
{
return 1 + (int)(Math.random() * 9);
}
}