2011-11-16 76 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类有点麻烦使用。