循环如何在谐波序列达到Java中的指定目标时停止求和?
我是一个Java的完全初学者,最近刚刚开始学习循环。我正试图编写一个程序,读入一个目标并找到第一个n,这样1+1/2+1/3+…+1/n>;目标该问题提供了一个代码,其中包含初始化为n和sum missing以及while的条件及其语句missing
我能够计算出如何使谐波串联循环,但我不确定在超过目标时用什么设置n来停止循环。我们还没有在课堂上学习数组
import java.util.Scanner;
/**
This program computes how many steps the sum 1 + 1/2 + 1/3 + ...
needs to exceed a given target.
*/
public class ReciprocalSum
{
public static void main(String[] args)
{
double sum = 0;
int n = ???? ;
Scanner in = new Scanner(System.in);
System.out.print("Target: ");
double target = in.nextDouble();
int i = 0;
//Notes
// 1 + 1/2 + 1/3 + 1/4 + ..... 1/n
//Make a loop that repeats itself starting with n = 1 --> 1/1 + 1/2 + 1/3 + 1/4 + 1/n
// 1.0/n + (1.0/ n - 1) + (1.0/n-2) +.... if n =4 --> 1/4 + 1/3 + 1/2 + 1/1 as long as n >0
while ( n > 0)
{
sum += 1.0/n ;
n--;
}
System.out.println("n: " + n);
System.out.println("sum: " + sum);
}
}
# 1 楼答案
n
应该在循环中递增(因此它应该从0
开始),当到达目标时,循环应该退出:# 2 楼答案
因为Java 8+有lambda,您可以生成一个范围
1
到n
,然后执行计算并在一步中得到总和。基本上,你能做到# 3 楼答案
通过计算序列的
sum
直到其总和大于目标值,可以通过这种方式实现: