计算Pi Java程序

我正在学习我的第一个Java编程课程,这是我的第一个课程。 我对如何处理它感到很困惑。 任何帮助或更正将不胜感激。

您可以使用以下系列来估算常量PI的值:

PI = 4 ( 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... + ( (-1)^(i+1) )/ (2i - 1) ) 

提示用户输入i的值(换句话说,使用此系列中的多少项)来计算PI。 例如,如果用户输入10000,则对该系列的前10,000个元素求和,然后显示结果。

除了显示最终结果(PI的最终近似值)之外,我希望您沿中间计算的方式显示每个10的幂。所以10,100,1000,10000等等,在屏幕上显示近似值PI的总和元素数量。

这是我到目前为止所做的..

 import java.util.Scanner; public class CalculatePI { public static void main(String[] args) { // Create a Scanner object Scanner input = new Scanner (System.in); // Prompt the user to enter input System.out.println("Enter number of terms"); double i = input.nextDouble(); // value of i user entered double sum = 0; for(i=0; i<10000; i++){ if(i%2 == 0) // if the remainder of `i/2` is 0 sum += -1 / ( 2 * i - 1); else sum += 1 / (2 * i - 1); } System.out.println(sum); } } 

我看到的第一件事是你试图从void main方法返回一个值。

不要return pi; 从你的主要方法。 打印出来。

 System.out.println(pi); 

其次,当人们写一个for循环时,他们通常会迭代i ,这可能与你的教授在公式中提到的相同

 for(double i=0; i 

现在,这将无法正常工作,你仍然必须处理^ ,java本身不使用。 幸运的是, -1^(i+1)是一个交替的数字,所以你可以使用if语句

 for(double i=0; i 

有时答案是一行简单的代码。 你也重新分配给我0,所以我假设你以错误的方式使用用户输入。

 for(int counter=1;counter 

输入应该是任何变量,硬编码或由用户输入设置(例如1000,10000,100000)。 这应该工作

理解公式 :在尝试通过代码求解之前考虑公式的性质。 我这样说是因为如果你这样做了,你就不会尝试用以下代码在正面和负面之间交替:

 if(i%2 == 0) sum += -1 / ( 2 * i - 1); else sum += 1 / (2 * i - 1); 

由于分子,该系列在正数和负数之间交替,

-1 ^ (i + 1)

当指数为偶数时,分子为正。 当指数为奇数时,分子为负数。 这意味着您的代码中不需要在正数和负数之间交替,因为公式本身就是这样。 此外,必须在括号1st中计算求和,然后在末尾乘以4。

代码中的公式在代码中编写公式,您应该知道您需要Math.pow(base,exponent)方法来获得幂的数字。 例如,2 ^ 3是Math.pow(2,3)。 考虑到这种方法,公式会是这样的:

 PI = 4 * (1 - 1/3 + 1/5 + ... + Math.pow(-1, i + 1) / (2 * i - 1)); 

计算PI:您可以使用for循环通过使用for循环来计算PI,如下所示:

 for (int i = 10000; i > 0; i--) { PI += Math.pow(-1, i + 1) / (2 * i - 1); // Calculate series in parenthesis if (i == 1) { // When at last number in series, multiply by 4 PI *= 4; System.out.println(PI); // Print result } } 

我选择让我的for循环从10000开始并在i = 1时结束。基本原因是在Java中,由于浮点数的四舍五入,如果你添加较小的数字,你将获得更准确的结果更大的数字。 所以,我是从右到左而不是从左到右计算系列。 然后我允许程序计算括号中的值,只有系列中的最后一个数字才会乘以4并打印结果。

请注意,您可以使用用户输入替换10000,如下所示:

 java.util.Scanner input = new java.util.Scanner(System.in); //You can import instead System.out.println("Enter number of loops: "); int loops = input.nextInt(); for (int i = loops; i > 0; i--) { ...