2010-10-29 101 views
1

我想用多边形做一些计算。所以我需要用户输入一些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(); 
    } 

但是循环中的输入只是执行一个。所以休息条件有些问题。

有什么想法?

回答

4

你应该有或(||),不和(& &)

while((x != fX) || (y != fY)){ 
     nVertex++; 
     x = readDouble(); y = readDouble(); 
    } 

你想,只要x不等于FX或Y contine是FY不等于 - 即

NOT (x == fX AND y == fY) 

in pseudo code。使用当前的代码,只要x和y中的一个与初始值相同,就会终止循环。

2

正如保罗所说,你应该有“||” (或运营商)而不是“& &”(和运营商)在while条件。你想循环,直到两者都是相同的,所以你想要继续,如果任一不平等。

同样重要的是,您不应该将等于比较用于浮点比较。浮点不精确意味着你不应该依赖这些值完全相等。虽然很有可能从文件中读取的相同值在机器表示中产生完全相同的值,但不能保证。您应该考虑更改文件格式以用其他方式指示多边形的末端。如果这是不可能的,考虑使用不太精确的比较,如coordiantes等于一些小的精确度(比如1e-6)。所以:

while (Math.abs(x-fx)<1e-6 || Math.abs(y-fy)<1e-6) {