2011-11-16 5 views
1

明らかにクラスの割り当てに基づいて、これは宿題です。あなたができる限り多くの手助けをします.HWを投稿するために私に火を付けないでください。Java Rectangles and Casting

私は本を読んで、過去2時間オンラインで読んでいて、この馬鹿な四角形が「setXを見つけることができません」という神の愛を見つけることができません。また、倍精度をintにキャストせずintにする方法もありますか?それは本当に乱雑に見える、私たちは包囲する方法を除いて何も追加することになっていない...私はキャストする必要があると思う? RectangleがメソッドsetX()またはsetY()を持っていないので、あなたが...

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

を与えることができます任意の助け

感謝。あなたが使用する位置を設定しようとしている場合はsetLocation(x,y)

編集:setWidth()またはsetHeight()メソッドもありません。setSize(width、height)を使用します。 Rectangleクラスにはx、y、width、heightのフィールドがありますが、フィールドがプライベートになり、パブリックgetterメソッドとsetterメソッドが使用される通常のJava規則には従いません。この場合、フィールドに直接アクセスして、ちょうどcontainRec.x = whateverと言うことができますが、それに入るのは悪い習慣です。

(int)キャストを削除したくない場合は、そのセクションを確実にクリーンアップすることができます。 rects.get(i)を呼び出す代わりに、矩形currentRect = rects.get(i);以上のループの先頭に1つずつ、for-eachループを使用することもできます。

1

申し訳ありませんが、私が出せなければならなかった:D 悪いマット: - * ここでは、APIのためのリンクです。)http://download.oracle.com/javase/1,5,0/docs/api/java/awt/Rectangle.html

何SETXは(ありません)またはSETY(

+0

Lol大丈夫、私はこの問題を実際よりももっと複雑にしていると思う:(私はいくつかのものを設定したが、今は警告を受ける...あまりにも多くの鋳物〜_〜.....絶対に役に立たない.... – Matt

1

私はあなたを想定して」 java.awt.Rectangleクラスを使用してください。それはsetX方法(これを確認するためのJavadocを見てみましょう)を持っていませんが、それはは、それが公共であることをxフィールドの宣言しないので、あなたはちょうどそれを直接設定することができます。

containRec.x = whatever; 

同じが行きますもちろん、yの場合。パブリックフィールドを直接設定するのは一般的に悪いことです(@ Jordan Bentlyが指摘したように)が、この場合はうまくいくでしょう。

それともsetLocationsetBoundssetSizesetRectまたはsetFrameのいくつかの組み合わせを使用することができます。

編集:あなたは完全に整数演算を使用して、これらの厄介なキャストを取り除くことができます。 getX()を使用する代わりに、doubleを返します。xフィールドを直接参照してください。intです。

java.awt.Rectangleクラスは、使用するにはやや面倒です。