我想用多边形做一些计算。所以我需要用户输入一些x和y坐标。这由以下代码执行:
private static boolean isX = true;
private static Scanner scanner = new Scanner(System.in);
private static double readDouble() {
double value = 0;
System.out.print("Koordinate " + (isX ? "X" : "Y") + " : ");
value = scanner.nextDouble();
if (!isX)
System.out.println("--------------------");
isX = !isX;
return value;
}
要计算多边形的轮廓,我需要多边形的总数。输入在循环中执行。当最后一个多边形数据与第一个多边形数据具有相同的坐标时,输入应结束。例如。第一个输入是X:1 Y:1,X:1,X:2将结束输入。
double fX = readDouble(); double x = 0.0;
double fY = readDouble(); double y = 0.0;
int nVertex = 1;
while((x != fX) && (y != fY)){
nVertex++;
x = readDouble(); y = readDouble();
}
但循环中的输入只执行了一些。所以休息条件有问题。
任何想法?
答案 0 :(得分:4)
你应该有或(||),而不是和(&&)
while((x != fX) || (y != fY)){
nVertex++;
x = readDouble(); y = readDouble();
}
只要x不等于fX或者y不等于fY,你想要contine,那就是
NOT (x == fX AND y == fY)
伪代码中的。使用当前代码,只要x和y中的一个与初始值相同,就会终止循环。
答案 1 :(得分:2)
同样重要的是,您不应该使用等于比较来进行浮点比较。浮点的不精确意味着你不应该依赖这些值完全相等。虽然从文件读取的相同值很可能会在机器表示中产生完全相同的值,但不能保证。您应该考虑更改文件格式以便以其他方式指示多边形的结尾。如果这是不可能的,请考虑使用不太精确的比较,例如坐标等于一些小的精度(比如1e-6)。所以:
while (Math.abs(x-fx)<1e-6 || Math.abs(y-fy)<1e-6) {