我正在尝试创建一个单个for循环,该循环使用变量“ lapTime”存储假设的滑雪者的当前lapTime。滑雪者要完成5圈,每圈有10%的慢率。我正在编写的方法应允许用户输入他们的圈数,而我的for循环应预测滑雪者完成圈数的时间。
slowRate公式:
public class ConsumerClass {
private final String userEmail;
@Inject
public ConsumerClass(@FullEmail String fullEmail) {
this.userEmail = fullEmail;
}
}
我尝试在for循环中使用“ if-else”语句来强制它返回取决于用户lapNumber输入的不同值,但这只会中断for循环(死代码错误)。
当前,for循环每次循环访问时仅返回一个值-11秒。我尝试做:nextLapTime = previous lap time + (previous lap time * slowrate);
,但是由于任何奇怪的原因,它都会返回16.(数字)。即使lapTime应该设置为等于firstLapTime = =10。我在下面提供的代码仍返回值15 – idk为什么。
前循环:
lapTime = lapTime + (lapTime * slowRate)
这是我要调试的测试方法-
1)
public double getLapTime(double firstLapTime, double slowRate, int lapNumber)
double lapTime;
lapTime = firstLapTime;
for (lapNumber=1; lapNumber<=5; lapNumber ++) {
lapTime = lapTime + (firstLapTime * slowRate);
}
return lapTime;
}
2)
public void testShouldHaveSecondLapOf11Seconds() {
// Act: call our method with proper parameter value for our test
double actualResult = theCalculator.getLapTime(10, .1, 2);
// Assert: assert that our expected value is equal to the actual result
assertEquals(11.0, actualResult, 0.001);
我期望以某种方式接收JUnit测试中所示的值 我的for循环中的逻辑未返回应有的lapTimes。每次循环迭代仅返回一个数字。
PS ..这是我的第一篇文章之一,因此对于任何格式问题,我们深表歉意。我会尽力改善这一点。谢谢!
答案 0 :(得分:1)
我认为您的问题出在for循环本身。因为即使调用getLapTime()方法并将3作为lapNumber
传递,您仍然会在for循环中为其分配值1。因此,实际上您的lapNumber
等于3,实际上等于1。
for (lapNumber=1 /* your chaning the value of lapNumber here to 1 */; lapNumber<=5; lapNumber ++) {
lapTime = lapTime + (firstLapTime * slowRate);
}
您可以尝试
for (int i = lapNumber; i <= 5; i++) {
lapTime = lapTime + (firstLapTime * slowRate);
}
答案 1 :(得分:0)
我相信您的代码中有两个错误。
第一个是您创建for循环的方式。我相信您想在每次迭代中计算下一圈的时间。一次迭代将给您第二圈,两次迭代将产生第三圈时间,依此类推。这不是您当前正在做的,因为您始终在计算第五圈时间。
然后,通过查看第二圈的预期答案,我认为减速是相对于执行的最后一圈,而不是第一圈。否则,您不需要for循环来计算第n圈时间,只需要计算一次绝对减速,将其乘以所需的圈数并将其加到第一圈的时间即可。之所以不起作用的奇怪原因是因为您遇到了循环迭代问题。
我建议使用此for循环:
for (int id = 1; i < lapNumber; i++) {
lapTime = lapTime + (lapTime * slowRate);
}