2016-02-19 26 views
0

該程序假設採取在(x,y)座標和兩個矩形和顯示用字符串說它們重疊,含有或不重疊兩個矩形的寬度和高度。我有正確的圖形。但我的問題在於要顯示的字符串的邏輯。當未包含或相互重疊的三角形的用戶輸入數據。它說它們重疊。我需要幫助修復代碼的邏輯。兩個矩形邏輯錯誤

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class TwoRectangles extends Application { 

    public void start(Stage primaryStage) throws Exception { 

     Pane pane = new Pane(); 
     double width = 400; 
     double height = 400; 

     ArrayList<Rectangle> rectangles = new ArrayList<>(); 
     Scanner input = new Scanner(System.in); 

     for (int i = 1; i <= 2; i++) { 
      System.out.print("Enter (x, y) of center, width, and height or rec " + i + ": "); 
      Rectangle temp = new Rectangle(input.nextDouble(), input.nextDouble(), input.nextDouble(), 
       input.nextDouble()); 
      temp.setFill(Color.TRANSPARENT); 
      temp.setStroke(Color.BLACK); 

      rectangles.add(temp); 
     } 

     Rectangle rec1 = rectangles.get(0); 
     Rectangle rec2 = rectangles.get(1); 

     String s = ""; 

     if (!(rec1.contains(rec2.getWidth(), rec2.getHeight()) 
      || rec2.contains(rec1.getWidth(), rec1.getHeight()))) { 
      s = "One rectangle is contained in another."; 
     } else if (rec1.intersects(rec2.getX(), rec2.getY(), rec2.getWidth(), rec2.getHeight()) 
      || rec2.intersects(rec1.getX(), rec1.getY(), rec1.getWidth(), rec1.getHeight())) { 
      s = "One rectangle overlaps another." ; 
     } else { 
      s = "The rectangles do not overlap."; 
     } 

     Text text = new Text(width * 0.1, height * 0.9, s); 
     pane.getChildren().add(text); 
     pane.getChildren().addAll(rectangles); 
     primaryStage.setTitle("rectangles.."); 
     primaryStage.setScene(new Scene(pane, width, height)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

回答

0

它看起來像你的主要問題是你的「包含」檢查。它只考慮了矩形的寬度和高度,而不是它們的位置。你可以寫一個「載」的方法,如:

private static boolean contains(Rectangle r1, Rectangle r2) { 
    return r1.getX() <= r2.getX() && r1.getY() <= r2.getY() 
      && r2.getX() + r2.getWidth() <= r1.getX() + r1.getWidth() 
      && r2.getY() + r2.getHeight() <= r1.getY() + r1.getHeight(); 
} 

然後改變你的支票

if (contains(rec1, rec2) || contains(rec2, rec1)) { 
     s = "One rectangle is contained in another."; 
    } else if (rec1.intersects(rec2.getX(), rec2.getY(), rec2.getWidth(), rec2.getHeight())) { 
     s = "One rectangle overlaps another."; 
    } else { 
     s = "The rectangles do not overlap."; 
    } 

(你只需要檢查的交集的一種方式,如果矩形A相交B,那麼B也因爲與A)相交。

+0

之前,你太了不起了。 – CodeNoob

0

嘛, 「遏制」 是很容易的:

boolean contain = rect1.contains(rect2) || rect2.contains(rect1); 

之後, 「重疊」 很簡單:

boolean overlap = ! contain && rect1.intersects(rect2); 

或者,讓你的字符串:

String s = (rect1.contains(rect2) || rect2.contains(rect1) 
      ? "One rectangle is contained in another." 
      : rect1.intersects(rect2) 
       ? "One rectangle overlaps another." 
       : "The rectangles do not overlap."); 
+0

完全相同的輸出,我越來越 – CodeNoob