我正在开发一个程序,以递归方式生成音阶中的音调频率.每个频率是比前一个频率高两个的第十二个根.该程序必须使用递归(呃,教育).当我使用这种方法时,我只是一遍又一遍地重复初始音调.这是为什么?
public static void scale(double x, double z){
double y;
if(z == x){
y = z * Math.pow(2, (1/12));
System.out.println(y);
scale (y, y);
}
else if(z >= (2 * x) - 1 || z <= (2 * x) + 1){
y = z;
System.out.println();
}
else{
y = z * Math.pow(2, (1/12));
scale (y, y);
}
System.out.println(y);
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?
因为Java的整数除法.具体来说,1/12
变得0
不是0.083333333
,因为int
必须产生.然后2
提升到权力0
是1
和y
是一样的z
.
使用double
文字强制浮点除法.
1.0/12.0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47 次 |
最近记录: |