我的代码的问题是,当我输入0时,结果为0.0,但每当我输入大于零的任何东西时(如1,2,3,4,5,6,998 ......任何东西)结果在每种情况下总是1.0。我的逻辑在迭代中是不正确的吗?
我的代码:
/*/ Write a y program that will calculate the value of y if the expression
of y is as follows (n is the input):
y = 1/1 + 2/3 + 3/5 + 4/7 + ....... + n/(2n-1) /*/
import static java.lang.System.*;
import java.util.*;
class Practice_Problems04_JavaPrograms_Task04{
public static void main(String[] args){
Scanner orcho = new Scanner(in);
out.println("Please enter the value of n: ");
int n = orcho.nextInt();
double y = 0;
for(int count = 1; count <= n; count++){
y += (count / ((2 * count) - 1));
}
out.println("The summation is, y = " + y);
orcho.close();
}
}
答案 0 :(得分:4)
count / ((2 * count) - 1)
是整数除法,需要浮点数除法,更改为count / ((2 * count) - 1.)
当两个整数进行除法运算时,则执行整数运算,a / b
等于数学运算a/b
,并删除了小数部分。
1 / 2 -> 0.5 -> 0
3 / 2 -> 1.5 -> 1
-3 / 2 -> -1.5 -> -1
-3 / -2 -> 1.5 -> 1
事实上,(a / b) * b + (a % b)
始终等于a
。
要执行浮点数除法,a
和b
之一需要是一个浮点数,您可以使用隐式和显式转换。与a * 1. / b
或(double)a / b
您可以查看java 8 specs multiplicative operators和type conversion。
乘法表达式的类型是其操作数的提升类型。 如果提升的类型是int或long,则执行整数运算。 如果提升的类型是float或double,则执行浮点运算。 15.17
答案 1 :(得分:0)
你正在将整数划分为一起,它总是产生一个int。您应该使用双打以获得结果:
for(double count = 1; count <= n; count++){
y += (count / ((2 * count) - 1));
}
答案 2 :(得分:0)
替代什么T&amp; delta已经提到你可以在除法中尝试显式类型转换,以便除法实际上返回类型正确的值。
参考文献: https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html
谢谢,
-Abe。