これを理解しようとすると問題が発生します。単一の演習を処理する抽象クラス(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を動的に変更できるようにしたい(たとえば、mMathMagではなくmMnemonicsから選択するように指示する)2)特定のTraningClassで選択したエクササイズを選択する。たとえば、mMathMagがエクササイズタイプTwoDigitsX11を選択できるかどうかを設定します。3)特定のエクササイズの待機時間を変更します(関数setWaitingTime()にアクセスします)。
私の問題は、特定のトレーニングクラスと演習を追加または削除できるようにしたいため、これを処理するための特定の変数のセットを作成できないことです。理想的には、アプリは設定ページからmTrainingClasses要素にアクセスできる必要があります。そしてそれを処理します。
これはどのように行うことができますか?ありがとう!