Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要Java循环_Java_Loops_For Loop - Fatal编程技术网

需要Java循环

需要Java循环,java,loops,for-loop,Java,Loops,For Loop,正如大家从下面笨拙的代码中所看到的,我对编码相当陌生。然而,看看这段代码,你可以明白我的意思。这段代码基本上做了它应该做的事情,但是我想把它写成一个循环来提高效率。有人能给我指一下正确的方向吗?我对递归做了一些挖掘和思考,但我还没有弄清楚如何在这里应用它 public static void main(String[] args) { double a = 10; double b = 2; double c = 3; double avg = (a + b +

正如大家从下面笨拙的代码中所看到的,我对编码相当陌生。然而,看看这段代码,你可以明白我的意思。这段代码基本上做了它应该做的事情,但是我想把它写成一个循环来提高效率。有人能给我指一下正确的方向吗?我对递归做了一些挖掘和思考,但我还没有弄清楚如何在这里应用它

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);

}

从功能上讲,这相当于您所做的:

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

}
publicstaticvoidmain(字符串[]args){
双a=10;
双b=2;
双c=3;
双平均值=(a+b+c)/3;
系统输出打印项次(平均值);

对于(inti=0;i如果你是说代码更短,效率更高,你可以这样做

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);
   }
}
publicstaticvoidmain(字符串[]args){
双a=10;
双b=2;
双c=3;
对于(int i=0;i<4;i++){
a=(a+b+c)/3;
系统输出打印项次(a);
}
}

我不知道这个计算代表什么(某种特殊的加权平均数?),但与其使用重复和循环,不如使用一些代数和重构术语来实现完全相同的计算:

公共静态双向计算加权平均值(双a、双b、,
双c){
返回a/81+40*b/81+40*c/81;
}
达到这种重新公式是因为系数
a
在混合中只出现一次,然后除以34,即81。然后
b
c
以不同的除法级别出现,因此
b
总和为:

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

它给出了直接的计算

a/81+40b/81+40c/81

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

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

迭代方法: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);
}
始终检查将结束递归的条件。在我们的示例中,它是应该执行操作的次数


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

查看:提示:您希望先计算
avg
,然后循环3次。在每次迭代中,您希望计算
(之前的结果+b+c)/3
。希望这有帮助……你应该解释一下你的代码应该做什么,这样我们才能给你一个解决方案。我必须同意@Gianlucca。在不知道你的最终目标是什么的情况下,不清楚实现它的最佳方法是什么。看起来有点像现在正在使用蛮力,而可能有b一个更优雅的解决方案来计算你想要的答案。非常好,谢谢!这正是我想要实现的。这是第一个System.out.println(avg);我在输出中看到的第一行,然后我们进入循环?正确。如果这个答案令人满意,您能接受它作为正确答案吗?这确实回答了原始的循环要求,实现了预期的结果,但我仍然建议使用我的答案中建议的直接、单一的计算方法。循环如果效率很重要,则应尽可能避免(尤其是递归)。
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);
}