我写了下面的for循环,每次执行下面的代码都得到FinalResult答案为1。
我的代码有什么问题?
1-12+13-14+15-16......直到n个条款。
package Practice;
import java.util.Scanner;
public class SeriesHW {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Till what number you want to calculate this series?");
int n=input.nextInt();
int resultone = 0;
for(int i=1;i<=n;i=i+2) {
resultone+=1/i;
}
int resulttwo = 0;
for(int j=2;j<=n;j=j+2) {
resulttwo+=1/j;
}
int finalresult=resultone-resulttwo;
System.out.println("Answer is : " + finalresult);
}
}
练习;导入java.... BigDecimal
而不是 int
因为Java的自动装箱会给你带来很多麻烦,当你带了 int
在十进制世界中,无论是作为变量还是作为字面,都可以在十进制世界中进行。
注:目前将小数点舍入到celel,并在下面一行保持2的比例。resultone = resultone.add(BigDecimal.ONE.divide(BigDecimal.valueOf(i),2, RoundingMode.CEILING));
根据您的需要,可以随时更新它。
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;
public class SeriesHW {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Till what number you want to calculate this series?");
int n = input.nextInt();
BigDecimal resultone = BigDecimal.ZERO;
for (int i = 1; i <= n; i = i + 2) {
resultone = resultone.add(BigDecimal.ONE.divide(BigDecimal.valueOf(i),2, RoundingMode.CEILING));
}
BigDecimal resulttwo = BigDecimal.ZERO;
for (int j = 2; j <= n; j = j + 2) {
resulttwo = resulttwo.add(BigDecimal.ONE.divide(BigDecimal.valueOf(j),2, RoundingMode.CEILING));
}
BigDecimal finalresult = resultone.subtract(resulttwo) ;
System.out.println("Answer is : " + finalresult);
}
}
产量:
Till what number you want to calculate this series?
10
Answer is : 0.66