2011-11-16 78 views
1

很顯然,根據課堂作業,這是家庭作業..所以幫助我盡你所能/希望,不要讓我張貼HW好嗎?爪哇矩形和鑄造

我一直在死亡,閱讀我的書,通過在線閱讀過去兩個小時,無法找到神的愛爲什麼這個愚蠢的矩形說「找不到方法setX()」。還有一種方法可以使雙打成爲整數,而不會將它們作爲整型?它看起來非常混亂,我們不應該添加任何內容,除非在封閉的方法中......我想我必須投射?

感謝您的幫助,您可以給..

import java.awt.Rectangle; 
import java.util.ArrayList; 

public class Homework18A 
{ 
    public static void main(String[] args) 
    { 
     ArrayList<Rectangle> test = new ArrayList<Rectangle>(); 
     test.add(new Rectangle(10, 20, 30, 40)); 
     test.add(new Rectangle(20, 10, 30, 40)); 
     test.add(new Rectangle(10, 20, 40, 50)); 
     test.add(new Rectangle(20, 10, 50, 30)); 
     Rectangle enc = enclosing(test); 
     System.out.println(enc); 
     System.out.println("Expected: java.awt.Rectangle[x=10,y=10,width=60,height=60]"); 
    } 

    /** 
     Computes the smallest rectangle enclosing all rectangles in 
     an array list. 
     @param rects an array list of rectangles of size >= 1 
     @return the smallest rectangle enclosing all rectangles in rect 
    */ 
    public static Rectangle enclosing(ArrayList<Rectangle> rects) 
    { 
     Rectangle containRec = new Rectangle(0, 0, 0, 0); 
     for(int i = 0; i < rects.size(); i++) { 
       if(rects.get(i).getX() < containRec.getX()) 
        containRec.setX((int)rects.get(i).getX()); 
       if(rects.get(i).getY() < containRec.getY()) 
        containRec.setY((int)rects.get(i).getY()); 
       if(rects.get(i).getX() + rects.get(i).getWidth() > containRec.getWidth()) 
        containRec.setWidth(((int)rects.get(i).getX() + rects.get(i).getWidth())); 
       if(rects.get(i).getY() + rects.get(i).getHeight() > containRec.getHeight()) 
        containRec.setHeight(((int)rects.get(i).getY() + rects.get(i).getHeight())); 
     } 
     return containRec; 
    } 
} 

回答

2

因爲矩形沒有一個方法setX()setY()。如果您嘗試設置要使用的位置setLocation(x,y)

編輯:沒有setWidth()或setHeight()方法,你想使用setSize(width,height)。儘管Rectangle類具有x,y,寬度和高度的字段,但它並不遵循常規的Java約定,其中字段是私有的,並且使用公共的getter和setter方法。在這種情況下,您可以直接訪問這些字段,只需說containRec.x = whatever,但這是一個不好的習慣。

你不想刪除(int)強制轉換,但是你可以清理該部分。不要調用rects.get(i),你可以在循環的開頭放一行,表示Rectangle currentRect = rects.get(i);或更好,但使用for-each循環。

1

很抱歉,但我不得不勞克:d 差馬特: - * 這裏是鏈接的API:http://download.oracle.com/javase/1,5,0/docs/api/java/awt/Rectangle.html

沒有setX的()或塞蒂()

+0

大聲笑沒關係,我想我讓這個問題比它真正的更復雜:(我已經設置了一些東西,但現在得到警告......太多的鑄件〜_〜..... freaking矩形問題是絕對有用...... – Matt

1

我想你」重新使用java.awt.Rectangle類。它沒有一個setX方法(看看Javadoc中證實了這一點),但它聲明它是x場是公開的,所以你可以將它直接:

containRec.x = whatever; 

也是一樣對於y,當然。直接設置公共字段通常是一件壞事(正如@Jordan Bently指出的那樣),但在這種情況下它將起作用。

或者你可以使用的setLocationsetBoundssetSizesetRectsetFrame某種組合。編輯:你可以通過使用完全整數算術擺脫所有那些討厭的演員陣容。而不是使用getX(),它返回double,直接查找x字段 - 這是一個int

java.awt.Rectangle類有點麻煩使用。