求救,java問題不懂!15點贈送!

老師給的作業,以下列程式找出左上及右下的點.以便連線成一個長方形(EX:x=(1,1),y=(2,0) 即可構成一個長方形)

老師要求建構3個建構函數及寫出註解

老師有提示以this來寫出建構子

條件1的建構函數Rec()

當未輸入參數就會自動作出一個預設的長方形(EX:(0,3),(5,0))

在加入2個方法

條件一

當有4個點所構成的長方形算出面積,以int area

條件2

判斷面積是否為正方形,以boolean is square

條件2的建構函數Rec(int x1,int y1 ,int x2 ,int y2)

當輸入2個點的參數就會做出一個長方形(EX:(2,3),(5,1))

在加入2個方法

條件一

當有4個點所構成的長方形算出面積,以int area

條件2

判斷面積是否為正方形,以boolean is square

條件3的建構函數Rec(Point P1 ,int len)

輸入1個點的參數再加上一個邊長即可找出右下角的點,即會做出一個正方形(EX:(2,3),4)

在加入2個方法

條件一

當有4個點所構成的長方形算出面積,以int area

條件2

判斷面積是否為正方形,以boolean is square

下面為老師給的程式過程...因為自己不是資管出來的..為半路出家所以學的很辛苦,這個問題已經想了一周卻還是沒有任何突破只好厚著臉皮上來向大家討教,還望不令賜教

public class Hw2{

public static void main(String args[]);

{

Rec r=new Rec ( new Point (2,3), new Point(5,1));

}

System.out.println(Point);

}

class Rec{

Point uppLeft ,lowenRight;

Rec (Point left, Point right){

uppLeft=left;

lowenRight=right;

}

}

class Point

{

int x;int y;

Point (int a, int b){

x=a;

y=b;

}

}

可以幫我加一下註解嗎?感謝大恩大德,可是資質實在太過魯鈍,看不懂="=...

Update:

納在請教一下..如果我在加入一個長方形,如何能算出重疊的區域的兩點跟面積呢?

Update 2:

感謝大大....可是關於印出結果的部分你沒有寫出,我有嘗試寫看看..可是一直錯誤,可以麻煩大大寫一下嗎?還有可以寫一下簡單的註解嗎?詳細的註解,我在自己想想..拜託了喔!

Update 3:

你sop只有針對重疊的部分...但我需要其他的也要印出..

如果在class HW2中加入如下..

以自己定義兩個點為例:rec r1=new rec (1,2,3,4);

Update 4:

System.out.println("Point1("+r1.upperLeft.x+","+r1.upperLeft.y+")");

System.out.println("Point2("+r1.lowerRight.x+","+r1.lowerRight.y+")");

Update 5:

System.out.println("長:"+r1.length());

System.out.println("寬:"+r1.width());

System.out.println("面積:"+r1.area());

System.out.println("是否為正方形:"+r1.isSquare());

Update 6:

另外還有沒有定義點(Rec())跟定義一點和一邊長(Rec(1,4),len(3) 有試過了可是都一直錯誤..要怎麼加?

Update 7:

我的mail shadow812@seed.net.tw 掰託大大摟

1 Answer

Rating
  • Favorite Answer

    寄了.. -"-

    public class Hw2 {

    public static void main(String args[]) {

    Rec r1 = new Rec ( new Point (-6, -2), new Point(3, 5));

    Rec r2 = new Rec ( new Point (9, 3), new Point(-4, -4));

    Rec r = Rec.overlap(r1, r2);

    if( r == null )

    System.out.println("無重疊區域");

    else

    System.out.println("重疊區域 " + r + " 面積 = " + r.area() );

    }

    }

    class Rec {

    Point uppLeft ,lowenRight;

    // 建構子 0 原本的

    public Rec(Point left, Point right) {

    uppLeft = left;

    lowenRight = right;

    }

    // 建構子 1

    public Rec() {

    this( new Point(0, 3), new Point(5, 0) );

    }

    // 建構子 2

    public Rec(int x1, int y1, int x2, int y2) {

    this( new Point(x1, y1), new Point(x2, y2) );

    }

    // 建構子 3

    public Rec(Point P1 ,int len) {

    this( P1, new Point( P1.x + len, P1.y - len) );

    }

    // 長方形面積等於長 * 寬

    public int area() {

    return Math.abs( (uppLeft.x - lowenRight.x) * (uppLeft.y - lowenRight.y) );

    }

    // 正方形定義為長 = 寬

    public boolean isSquare() {

    return Math.abs(uppLeft.x - lowenRight.x) == Math.abs(uppLeft.y - lowenRight.y);

    }

    public String toString() {

    return uppLeft + " - " + lowenRight;

    }

    // 找出重疊的區域, 如果沒有重疊則回傳 NULL

    public static Rec overlap(Rec rec1, Rec rec2) {

    int x1, x2, y1, y2;

    x1 = comparePoint( rec2.uppLeft.x, rec1.uppLeft.x, rec1.lowenRight.x );

    x2 = comparePoint( rec2.lowenRight.x, rec1.uppLeft.x, rec1.lowenRight.x );

    y1 = comparePoint( rec2.uppLeft.y, rec1.uppLeft.y, rec1.lowenRight.y );

    y2 = comparePoint( rec2.lowenRight.y, rec1.uppLeft.y, rec1.lowenRight.y );

    if( x1 == x2 || y1 == y2 )

    return null;

    else

    return new Rec(x1, y1, x2, y2);

    }

    // 找出 p 是否在 p1, p2 的中間, 如果不是, 則找出最接近 p1, p2 的點

    private static int comparePoint(int p, int p1, int p2) {

    // 如果 p 在 p1, p2 的中間, ( p - p1 ) * ( p - p2 ) 一定為負數或 0

    if( ( p - p1 ) * ( p - p2 ) > 0 ) {

    if( p > p1 )

    return p1 > p2 ? p1 : p2;

    else

    return p1 > p2 ? p2 : p1;

    }

    else

    return p;

    }

    }

    class Point {

    int x;

    int y;

    public Point(int a, int b) {

    x = a;

    y = b;

    }

    public String toString() {

    return "( " + x + ", " + y + " ) ";

    }

    }

    2005-12-02 00:43:37 補充:

    一條對角線可以畫出無限個長方形, 在此把問題想簡單點, 假設你所要求的長方形是[正]的.....

    關於數學邏輯部份, 因為程式大概只有國中國小, 在此不解說....

    Math.abs是取絕對值的方式,

    建構式部份是Java的基本關念, 也不寫了..

    2005-12-02 00:43:52 補充:

    關於重疊的做法, 你可以用筆畫畫看:

    1. 2個長方形, 取一個當基準, 然後另一個取那2個頂點

    2. 取其中一個頂點, 找出最接近第一個長方形的點 ( 可能在邊上, 也可能在頂點上 )

    3. 再用相同方式計算另一個點

    4. 找出的2點如果x座標或y座標其中一個相等, 那表示2個長方形沒有重疊

    否則的話, 那2個點就是重疊的部份

    2005-12-02 00:44:06 補充:

    把 Rec 這個物件當成字串相加, 它會呼叫 toString() 的方法, 所以 Rec 類別下面

    有一個改寫 toString, Poing 類別也是一樣

Still have questions? Get your answers by asking now.