私は質問をし、答えのために5つの選択肢を与えるプログラムを作成しています。
1つは事前定義されており、正しいものです。他の1つは、回答のバンクからランダムに選択したいもので、配列全体もシャッフルされます。
私は何かを書きましたが、いくつかの矛盾があります。
1つは、事前定義された選択肢がリストに2回表示される場合があります(私のif
チェックをスキップしているように見えます)。もう1つは、実行するとエディターがクラッシュすることがあるということです。
私はfor in
ループを使用していますが、クラッシュが無限ループによって引き起こされるのではないかと心配しています。
これが私のコードです:
private var numberOfComponents:int;
private var maxComponents:int = 5;
//numberOfComponents returns the length property of my 'components' answer bank
componentsSelection = buildComponentSelectionList(0); //0 is the index of my correct answer
function buildComponentSelectionList(correctItemIndex){
var theArray:Array = new Array();
var indicesOfSelection:Array = getIndicesByIncluding(correctItemIndex);
Debug.Log(indicesOfSelection);
for (var i=0;i<indicesOfSelection.length;i++)
theArray.Push(components[indicesOfSelection[i]]);
return theArray;
}
function getIndicesByIncluding(correctItem){
var indicesArray:Array = new Array();
var numberOfChoices = maxComponents-1;
for(var i=0;i<numberOfChoices;i++){
var number = Mathf.Round(Random.value*(numberOfComponents-1));
addToRandomNumberSelection(indicesArray, number,correctItem);
}
indicesArray.Push(correctItem);
RandomizeArray(indicesArray);
return indicesArray;
}
function addToRandomNumberSelection(indicesArray:Array,number,correctItem){
if(indicesArray.length == 0){
indicesArray.Push(number);
} else {
var doesntExist = true;
for(var i=0;i<indicesArray.length;i++){
if(indicesArray[i] == correctItem)
doesntExist = false;
if (indicesArray[i] == number)
doesntExist = false;
}
if(doesntExist) {
indicesArray.Push(number);
} else {
addToRandomNumberSelection(indicesArray, Mathf.Round(Random.value*(numberOfComponents-1)),correctItem);
}
}
}
function RandomizeArray(arr : Array)
{
for (var i = arr.length - 1; i > 0; i--) {
var r = Random.Range(0,i);
var tmp = arr[i];
arr[i] = arr[r];
arr[r] = tmp;
}
}
エディターはUnity3Dで、コードはJavaScriptのバージョンです。私のエラーは、構文上のエラーではなく、論理的なエラーだと思います。
私はこのコードをずっと見つめていると感じており、明らかな何かが欠けています。
誰か助けてもらえますか?