需要Java循环

时间:2017-09-29 15:55:59

标签: java loops for-loop

我对编码很陌生,正如大家可以从下面的笨拙代码中看到的那样。但是,查看此代码,您可以看到我正在获得的内容。代码基本上做了它应该的,但我想把它写成一个循环,以使其更有效。有人可能会指出我正确的方向吗?我已经做了一些挖掘和考虑递归,但我还没有弄清楚如何在这里应用它。

public static void main(String[] args) {

    double a = 10;
    double b = 2;
    double c = 3;
    double avg = (a + b + c)/3;
    double avg1 = (avg + b + c)/3;
    double avg2 = (avg1 + b + c)/3;
    double avg3 = (avg2 + b + c)/3;
    System.out.println(avg+ "\n" + avg1+ "\n"+ avg2 + "\n"+ avg3);

}

4 个答案:

答案 0 :(得分:2)

从功能上讲,这与你所做的相同:

public static void main(String[] args) {

    double a = 10;
    double b = 2;
    double c = 3;
    double avg = (a + b + c)/3;

    System.out.println(avg);

    for (int i=0; i<3; i++) {
        avg = (avg + b + c)/3;
        System.out.println(avg);
    }

}

但是你也应该知道更短的代码并不总是意味着有效的代码。解决方案可能更简洁,但我怀疑性能会有任何变化。

答案 1 :(得分:0)

如果你的意思是更短的代码效率,你就可以这样做。

public static void main(String[] args) {
    double a = 10;
    double b = 2;
    double c = 3;

    for (int i = 0; i < 4; i++) {
        a = (a + b + c) / 3;
        System.out.println(a);
   }
}

答案 2 :(得分:0)

我不知道这个计算代表什么(某种特殊的加权平均值?),但不是使用重复和循环,你可以通过使用一些代数并重构这些术语来达到完全相同的计算:

public static double directlyCalculateWeightedAverage(double a, double b,
        double c) {
    return a / 81 + 40 * b / 81 + 40 * c / 81;
}

这种重新制定是因为因子a在混合中只出现一次,然后除以3 4 ,即81.然后每个b和{{ 1}}出现在不同的除法级别,因此c总结为:

b

b/81 + b/27 + b/9 + b/3 == b/81 + 3b/81 + 9b/81 + 27b/81 == 40b/81 的处理方式完全相同。

这给出了直接计算

c

假设您的公式没有改变,我建议使用这种直接方法,而不是采用重复的计算和循环。

答案 3 :(得分:0)

您的问题可以通过两种方法解决:迭代(使用循环)或递归(使用递归函数)。

迭代方法:for循环

for循环允许您重复一组给定次数的指令。 在您的情况下,您可以写下以下内容:

double a = 10, b = 2, c = 3;
double avg = a;
for (int i = 0; i < 4; i++) {
    avg = (avg + b + c) / 3;
    System.out.println(avg);
}

这将打印您计算的4个第一个结果。 在我的示例中,我覆盖变量avg以仅保留最后的结果,这可能不是您想要的。为了保持每个循环迭代的结果,您可以将结果存储在数组中。

递归方法

在Java中,没有独立功能这样的东西。为了使用递归,您必须使用静态方法:

private static double recursiveAvg(double avg, int count) {
    // Always check that the condition for your recursion is valid !
    if (count == 0) {
        return avg;
    }

    // Apply your formula
    avg = (avg + 2 + 3) / 3;

    // Call the same function with the new avg value, and decrease the iteration count.
    return recursiveAvg(avg, count - 1);
}

public static void main(String[] args) {
    // Start from a = 10, and repeat the operation 4 times.
    double avg = recursiveAvg(10, 4);
    System.out.println(avg);
}

始终检查将结束递归的条件。在我们的示例中,它是应该执行操作的次数。

请注意,大多数程序员更喜欢迭代方法:更容易编写和读取,并且更不容易出错。