我正在学习我的第一个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);
}
}
答案 0 :(得分:8)
我看到的第一件事是您尝试从void main
方法返回一个值。
请勿使用主要方法return pi;
。打印出来。
System.out.println(pi);
其次,当人们编写for
循环时,他们通常会迭代i
,这可能与您的教授在公式中提到的i
相同
for(double i=0; i<SomeNumber; i++)
{
sum += ((-1)^(i+1)) / (2 * i - 1) );
}
现在,这将无法正常工作,您仍然必须处理^
,java本身不使用。幸运的是,-1^(i+1)
是一个交替的数字,所以你可以使用if
语句
for(double i=0; i<SomeNumber; i++)
{
if(i%2 == 0) // if the remainder of `i/2` is 0
sum += -1 / ( 2 * i - 1);
else
sum += 1 / (2 * i - 1);
}
答案 1 :(得分:2)
有时答案是一行简单的代码。此外,您将i重新分配给0,因此我假设您以错误的方式使用用户输入。
for(int counter=1;counter<input;counter++){
sum += Math.pow(-1,counter + 1)/((2*counter) - 1);
}
输入的应该是任何变量,硬编码或由用户输入设置(例如1000,10000,100000)。这应该工作
答案 2 :(得分:2)
理解公式:在尝试通过代码解决之前,请考虑公式的性质。我这样说是因为如果你这样做,你就不会尝试用以下代码在正面和负面之间交替:
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中,由于浮点数的舍入,如果添加较小的数字,您将获得更准确的结果1,并努力工作到更大的数字。所以,我是从右到左而不是从左到右计算系列。然后我允许程序计算括号中的值,只有系列中的最后一个数字才会乘以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--) {
...
答案 3 :(得分:0)
//这是使用巴比伦方法进行PI近似的公式。
int count = 10;
int m = 1;
int n = 0;
double pi = 0.0;
final double SQRT_12 = Math.sqrt(12);
while (count > n)
{
pi += SQRT_12 * (Math.pow(-1, n)/(m * Math.pow(3, n)));
System.out.println(pi);
m += 2;
n++;
}
答案 4 :(得分:0)
double Pi = 0.0;
long start = System.currentTimeMillis();
for (double i = 1; i < 100000000; i++) {
Pi += (i % 2 == 0) ? -1 / (2 * i - 1) : 1 / (2 * i - 1);
}
long stop = System.currentTimeMillis();
System.out.println(Pi * 4);
System.out.println(Math.PI);
System.out.println(stop-start);
// output:
// 3.141592663589326
// 3.141592653589793
// 2426