我在试图弄清楚这一点时遇到了一些问题:我有一组处理单个练习的抽象类 (Exercise) 的实例,以及一组包含特定练习的其他类 (Traning Class) 的实例。
我的应用程序选择一个随机培训课程,然后从中运行一个随机练习。从设置中,我希望能够从随机选择中选择例如要使用的培训课程和练习
这是我的代码
/** Common interface for all exercises */
public interface Exercise {
public Exercise run();
}
public abstract class ExerciseClass implements Exercise {
private int mWaitingTime = 3; //seconds to wait before answer is shown
private String mQuestion = "";
private String mAnswer = "";
private String mHint = "";
/*Getters and setters follow*/
}
这是特定培训课程的示例,其中添加了练习
public class MatheMagic extends TrainingClass {
public MatheMagic() {
class TwoDigitsX11 extends ExerciseClass {
public ExerciseClass run() {
String[] aRes = new String[3];
/*Choose a two digit number*/
int aRand = RandInt(100,11);
String aQuestion = aRand + " x 11";
String aAnswer = String.valueOf(aRand * 11);
String aHint = "To multiply by 11, take the first digit and the last digit, and put in the middle the sum of the two. I.E. 36 x 11 = 3 (3+6) 6 -> 396";
this.setQuestion(aQuestion);
this.setAnswer(aAnswer);
this.setHint(aHint);
return this;
}
}
//Set specific waiting times
TwoDigitsX11 aTwoDigitsX11 = new TwoDigitsX11();
aTwoDigitsX11.setWaitingTime(5);
//Add exercises to training class
mExerciseTypes.add(aTwoDigitsX11);
//these are other examples of exercises, whose code I’ve now not included
mExerciseTypes.add(aMultiplicationTables);
mExerciseTypes.add(new SquareTwoDigitsEndingFive ());
}
}
现在,在我的主要活动中,我有:
private ArrayList<TrainingClass> mTrainingClasses ;
mMathMag = new MatheMagic();
mMnemonics = new Mnemonics();
mTrainingClasses = new ArrayList<TrainingClass>();
mTrainingClasses.add(mMathMag);
mTrainingClasses.add(mMnemonics);
然后,正如我所说,我有一个函数 runRandomExercise,它从 mTrainingClasses 中选择一个随机元素,然后从其中的 ExerciseClass 数组列表中选择一个随机元素
从我的设置中,我希望能够 1) 动态更改 ArrayList(例如,告诉我想从 mMnemonics 中选择而不是 mMathMag) 2) 从特定 TraningClass 中选择哪个练习。设置,例如,mMathMag 是否可以选择练习类型 TwoDigitsX11 3) 更改特定练习的等待时间(访问函数 setWaitingTime() )
我的问题是我无法制作一组特定的变量来处理这个问题,因为我希望能够添加或删除特定的培训课程和练习,所以理想情况下,应用程序应该能够从设置页面访问 mTrainingClasses 元素并处理它。
如何才能做到这一点?谢谢!