[英]While loop break condition
我想对多边形进行一些计算。 所以我需要用户输入一些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();
}
但是循环中的输入只能执行一次。 因此中断条件出了点问题。
有任何想法吗?
您应该有或(||),没有和(&&)
while((x != fX) || (y != fY)){
nVertex++;
x = readDouble(); y = readDouble();
}
只要x不等于fX或y不等于fY,您就想构造-
NOT (x == fX AND y == fY)
用伪代码。 使用当前代码,一旦x和y之一与初始值相同,就将终止循环。
正如保罗所说,您应该使用“ ||” (或运算符)在while条件中不是“ &&”(和运算符)。 您要循环直到两者都相同,所以如果两者都不相等,则要继续。
同样重要的是,不应将等于比较用于浮点比较。 浮点数的不精确性意味着您不应依赖于值完全相等。 虽然从文件中读取的相同值很可能在机器表示中产生完全相同的值,但不能保证。 您应该考虑更改文件格式,以其他方式指示多边形的终点。 如果无法做到这一点,请考虑使用不太精确的比较,例如,coordiantes等于某个较小的精度水平(例如1e-6)。 所以:
while (Math.abs(x-fx)<1e-6 || Math.abs(y-fy)<1e-6) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.