3

私は学生で、確率をテストするプログラムを作成しようとしています。これは TestLuck と呼ばれ、ユーザーが決定した量の IntArrayLogs(ADT's) を生成し、ランダムな値が取り込まれます。プログラムは、最初の値に一致する前に生成された値の数を計算することになっています。

実際の問題: 「アプリケーション TestLuck を作成します。ユーザーにランダムな整数範囲の上限 (本には 10,000 と記載されていますが、365 でテストする必要があります) と、テストを実行する回数を入力してもらいます。平均。"

これは私が思いついたものですが、何らかの理由で正しい結果が得られません。使用する方法をテストしましたが、正しく機能しているようです。カウンターを追跡する方法に関係していると思います.

for(int k=0; k<numTests; k++) {   
    for(int i=0; i<upperLimit; i++) {
        arrLog.insert(n);
        n = rand.nextInt(upperLimit);
        if(arrLog.contains(arrLog.getElement(0))) {
            totalCount += i;
            break;
        }
        if(i == upperLimit-1)
            totalCount +=i;
    }

    System.out.println("Total Count: " + totalCount);
    arrLog.clear();
}   
testAverage = totalCount/numTests;
System.out.println("Average tests before match: " + testAverage);

メソッドを含む:

// Returns true if element is in this IntLog,
// otherwise returns false.
public boolean contains(int element) {                  
    int location = 0;
    int counter = 0;
    while (location <= lastIndex) {
        if (element == log[location]) {  // if they match
            counter++;
            location++;
            if(counter == 2)
                return true;
        } else
            location++;
    }
    return false;
}
4

2 に答える 2

0

私はあなたのコードに奇妙なものを見つけました。

まず、値を与える前に挿入nしています。arrLogn

i == upperLimit-1次に、ループの後でforカウンターに 1 を追加するかどうかをテストします。最後のステップでループが中断した場合にのみ、この条件が満たさforれます (この場合、カウンターに 2 を追加しました)。

3 番目に、このメソッドでは、 2 回見つかったcontains場合に true を返しています。element私が理解しているように、最初は位置0(最初の要素)にあり、次にテスト自体である必要がありますが、最初の要素を引数として渡しています。おそらくlocation1 から始めて (最初の要素をスキップして)、1 回カウントする必要があります。

for (location=1; location<=lastIndex; location++) {
    if (element = log[location]) return true;
}
return false;

nただし、比較するだけで簡単になるはずですarrLog.getElement(0)

PS他のすべてが適切に初期化されていると想定しています。

于 2013-09-04T19:46:47.477 に答える