- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是一名学生,正在尝试编写一个测试概率的程序。它称为 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;
}
最佳答案
您不需要 contains() 方法,因为这只会花费更多时间来计算像比较这样简单的事情。
问题是在匹配第一个数字之前必须生成多少个数字,但是您需要考虑这是否包括第一个数字。例如。 {1,2,3,4,1} 计数 = 5,或 {1,2,3,4,1} 计数 = 4。无论哪种方式,这都不会影响此答案的逻辑:
如果你重新安排你的方法,它会工作得更快。
for(int k=0; k<numTests; k++){
for(int i=0; i<upperLimit; i++){
arrLog.insert(n);
if(arrLog.getElement(0) == n && i != 0){// i != 0 to prevent it from counting a match on the first iteration
totalCount += i;//totalCount += i+1 if you are counting the first number
break;
}
n = rand.nextInt(upperLimit);
}
System.out.println("Total Count: " + totalCount);
arrLog.clear();
}
testAverage = totalCount/numTests;
System.out.println("Average tests before match: " + testAverage);
如果您需要使用 contains() 方法,请在评论中告诉我,我会编辑答案。
我还想建议不要使用任何存储数据结构,在这种情况下使用 ADT 的 IntArrayLog (同样,我不知道您是否需要在类(class)中使用 ADT);让你的程序运行得更快:
int firstNum;
for(int k=0; k<numTests; k++){
firstNum = rand.nextInt(upperLimit);
for(int i=1; i<upperLimit; i++){//notice this starts in 1
n = rand.nextInt(upperLimit);
if(firstNum == n){
totalCount += i;//totalCount += i+1 if you are counting the first number
break;
}
}
System.out.println("Total Count: " + totalCount);
arrLog.clear();
}
testAverage = totalCount/numTests;
System.out.println("Average tests before match: " + testAverage);
关于java - 在 TestLuck(概率)程序中计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622150/
我是一名学生,正在尝试编写一个测试概率的程序。它称为 TestLuck,它应该生成用户确定数量的填充有随机值的 IntArrayLogs(ADT's)。该程序应该计算在与第一个值匹配之前生成了多少个值
我是一名优秀的程序员,十分优秀!