Java Comp Sci嵌套循环以查找最接近的分数

时间:2014-09-20 23:15:44

标签: java loops nested

我想找到最接近的分数等于16/76。无论何时我运行这个,无论如何我都会得到1。我在学校为Java课做这个。

public class ClassOne {
public static double limit = 16/76;
public static double difference = 1;
public static double numer = 1;
public static double denom = 1;
public static void main(String[] args)
{




  for(int i = 1;i<=100;i++)
{
    for(int x = 1;x<=100;x++)
{
double temp = limit-(double)(x/i);
System.out.println((x/i));
if(Math.abs(temp) < difference && x/i != 16/76){difference = temp;numer = x; denom = i;
System.out.println("hi");}
}
}
    System.out.println(numer +  " " + denom);

}

}

2 个答案:

答案 0 :(得分:0)

你在这里遇到整数除法:

limit - (double)(x/i)

......在这里:

public static double limit = 16/76;

xi都是int。 分割操作生效后,此处的强制转换将生效

更改您的演员表,使其立即应用于其中一个变量:

limit - ((double)x)/i

另外,考虑一下你在做任何不具有浮点数的商(除非在它之后有一个小数或显式地转换为double) - 如果你需要的话它是一个浮点数,然后使用适当的演员。

答案 1 :(得分:0)

一些问题

  1. 在需要的地方使用(双)x /(双)i - 可能指定为临时
  2. 差异= temp应该是差异= Math.abs(temp)或将abs放在原始临时计算上
  3. x / i = 16/76会受到浮点错误的影响,因此您可能无需点击。可能想要使用类似16 * i!= 76 * x的东西,它可以用整数计算。我得到21 100。