黑马程序员技术交流社区

标题: 处理矩形关系的程序设计题 [打印本页]

作者: 熊娜    时间: 2014-4-29 21:18
标题: 处理矩形关系的程序设计题

今天又过来跟大家分享题目了,题目可能有点长,不过确实也算得上一道有意思的小编程题,关键在于你能找出一种方法来涵盖所有不同的情况。

在编写图形界面软件的时候,经常会遇到处理两个矩形的关系。

矩形的交集指的是:两个矩形重叠区的矩形,当然也可能不存。两个矩形的并集指的是:能包含这两个矩形的最小矩形,它一定是存在的。

题目要求是:由用户输入两个矩形的坐标,程序输出它们的交集和并集矩形。

矩形坐标的输入格式是输入两个对角点坐标,注意,不保证是哪个对角,也不保证顺序(你可以体会一下,在桌面上拖动鼠标拉矩形,4个方向都可以的)。

输入数据格式:

x1,y1,x2,y2

x1,y1,x2,y2

数据共两行,每行表示一个矩形。每行是两个点的坐标。x坐标在左,y坐标在右。坐标系统是:屏幕左上角为(0,0),x坐标水平向右增大;y坐标垂直向下增大。

要求程序输出格式:

x1,y1,长度,高度

x1,y1,长度,高度

也是两行数据,分别表示交集和并集。如果交集不存在,则输出“不存在”

前边两项是左上角的坐标。后边是矩形的长度和高度。

例如,用户输入:

100,220,300,100

150,150,300,300

则程序输出:

150,150,150,70

100,100,200,200

例如,用户输入:

10,10,20,20

30,30,40,40

则程序输出:

不存在

10,10,30,30

下面附上自己的代码:

  1. package class3;

  2. import java.util.Scanner;

  3. /*矩形坐标的输入格式是输入两个对角点坐标,注意,不保证是哪个对角,也不保证顺序(你可以体会一下,在桌面上拖动鼠标拉矩形,4个方向都可以的)。
  4. 输入数据格式:
  5. x1,y1,x2,y2
  6. x1,y1,x2,y2
  7. 数据共两行,每行表示一个矩形。每行是两个点的坐标。x坐标在左,y坐标在右。坐标系统是:屏幕左上角为(0,0),x坐标水平向右增大;y坐标垂直向下增大。
  8. 要求程序输出格式:
  9. x1,y1,长度,高度
  10. x1,y1,长度,高度
  11. 也是两行数据,分别表示交集和并集。如果交集不存在,则输出“不存在”*/
  12. class Rectangle{
  13.         int x1;
  14.         int y1;
  15.         int x2;
  16.         int y2;
  17.        
  18.         public Rectangle(int x1,int y1,int x2,int y2){
  19.                 this.x1=x1;
  20.                 this.y1=y1;
  21.                 this.x2=x2;
  22.                 this.y2=y2;
  23.         }
  24.        
  25. }
  26. public class C {

  27.         public static Rectangle find(Rectangle r){
  28.                 int minx=(r.x1<=r.x2)?r.x1:r.x2;
  29.                 int miny=(r.y1<=r.y2)?r.y1:r.y2;
  30.                 int maxx=(r.x1>=r.x2)?r.x1:r.x2;
  31.                 int maxy=(r.y1>=r.y2)?r.y1:r.y2;
  32.                 r=new Rectangle(minx, miny, maxx, maxy);
  33.                 return r;
  34.         }
  35.         public static void intersection(Rectangle r1,Rectangle r2){
  36.                 int minx=(r1.x1>=r2.x1)?r1.x1:r2.x1;
  37.                 int miny=(r1.y1>=r2.y1)?r1.y1:r2.y1;
  38.                 int maxx=(r1.x2<=r2.x2)?r1.x2:r2.x2;
  39.                 int maxy=(r1.y2<=r2.y2)?r1.y2:r2.y2;
  40.                 int length=maxx-minx;
  41.             int width=maxy-miny;
  42.             if(length<=0||width<=0){
  43.                     System.out.println("不存在");
  44.             }else{
  45.                     System.out.println(minx+","+miny+","+length+","+width);
  46.             }
  47.         }
  48.        
  49.         public static void union(Rectangle r1,Rectangle r2){
  50.                 int minx=(r1.x1<=r2.x1)?r1.x1:r2.x1;
  51.                 int miny=(r1.y1<=r2.y1)?r1.y1:r2.y1;
  52.                 int maxx=(r1.x2>=r2.x2)?r1.x2:r2.x2;
  53.                 int maxy=(r1.y2>=r2.y2)?r1.y2:r2.y2;
  54.                 int length=maxx-minx;
  55.             int width=maxy-miny;
  56.             if(length<=0||width<=0){
  57.                     System.out.println("不存在");
  58.             }else{
  59.                     System.out.println(minx+","+miny+","+length+","+width);
  60.             }
  61.         }
  62.         public static Rectangle scan(){
  63.                  Scanner scan = new Scanner(System.in);       
  64.                   int x1=scan.nextInt();
  65.                   int y1=scan.nextInt();
  66.                   int x2=scan.nextInt();
  67.                   int y2=scan.nextInt();
  68.                   Rectangle rec=new Rectangle(x1,y1,x2,y2);
  69.                   return rec;
  70.         }
  71.         public static void main(String[] args) {
  72.       Rectangle rec1=scan();
  73.       Rectangle rec2=scan();
  74.       intersection(find(rec1),find(rec2));
  75.       union(find(rec1),find(rec2));
  76.         }

  77. }
复制代码
      

程序运行结果符合要求,感兴趣的同学可以做一做,挺好玩儿的,我代码写得不正确的地方也希望大家能指正~

希望天天写代码的同学天天嗨森~~~



作者: 熊娜    时间: 2014-4-30 00:03
可能我写的代码有些难懂,因为没有写注释(一直都没有写注释的习惯,惭愧...),附上一张图,希望对想读我代码的同学有帮助




作者: miedongdong    时间: 2014-5-1 06:53
向你学习了~~分析得那么好
作者: 熊娜    时间: 2014-5-1 17:30
miedongdong 发表于 2014-5-1 06:53
向你学习了~~分析得那么好

嘿嘿~:loveliness:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2