使用JAVA实现两整数相除得到的结果离黄金分割率0.618最接近,输出此时的分子分母

JAVA实现两数相除商离黄金分割率0.618最近,且分子和分母不能同时为偶数 分子和分母范围在1-20以内 输出此刻的分子和分母
实现这个例子时犯了很多细节错误 都写在代码注释里了 果然还要提高基础

package testtwo;
public class GoldenRatio {
	//寻求两个整数相除,其结果离黄金分割点0.618最近
	//分母和分子不能同时为偶数
	//分母和分子的取值范围在1-20内
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double m;
		double n;
		double gold=0.618;
		double value;
		double i=0;
		double j=0;
		double temp=1;//创建一个副本,用来存储每一次的value,将初始值设为1 减少时间复杂度
		for(m=1;m<=20;m++) {
			for(n=1;n<=20;n++) {
				if(m%2==0&&n%2==0)//如果分母和分子都为偶数的话则跳过这一次循环
					continue;
				double shang=m / n;
				//大于0.168和小于0.618的数中都会有接近0.618的值 
				if(shang>gold)
					 value=shang-gold;
				else
					value=gold-shang;
				//temp=value //最开始想在这里添加一个用这样的表达式,于下面交换变量的比较条件
				//执行后发现结果有误,想了一会不能在这里将temp=value 这样下面if的条件永远为false无法执行了 果然基础还是不够牢固
				//double temp=1 不能将副本变量定义在for循环内 这样的话temp就位局部变量了,内部for循环结束就会被回收掉  最开始我翻了这个错误  琢磨半天发现这个问题
				if(value<temp) {
					temp=value;//更新要比较的值得
					i=m;
					j=n;
				}
				
					
				}
			
			
		}
		System.out.println("离黄金分割点0.618最近的分子是"+i+",分母是"+j);
	}

}

运行结果:
在这里插入图片描述

你可能感兴趣的:(使用JAVA实现两整数相除得到的结果离黄金分割率0.618最接近,输出此时的分子分母)