有没有办法让单个for循环为不同的用户输入返回不同的值?

时间:2019-02-15 02:35:48

标签: java loops for-loop

我正在尝试创建一个单个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 ..这是我的第一篇文章之一,因此对于任何格式问题,我们深表歉意。我会尽力改善这一点。谢谢!

2 个答案:

答案 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);
}