Прямоугольники Явы и Кастинг - PullRequest
1 голос
/ 16 ноября 2011

Очевидно, исходя из задания класса, это домашнее задание .. так что помогите мне столько, сколько сможете / хотите, не расстраивайте меня за публикацию HW, хорошо?

Я умираю, читая мою книгу, читая онлайн в течение последних двух часов и не могу найти, ради бога, ПОЧЕМУ этот тупой прямоугольник говорит: «Не удается найти метод setX ()».Также есть способ сделать двойники, быть целыми, не передавая их как int?Это выглядит очень грязно, и мы не должны добавлять ничего, кроме как в метод, включающий ... Я думаю, что я должен бросить ??

Спасибо за любую помощь, которую вы можете оказать ..

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;
   }
}

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Поскольку у Rectangle нет метода setX() или setY().Если вы пытаетесь установить положение, которое вы хотите использовать setLocation(x,y).

Редактировать: также нет методов setWidth () или setHeight (), вы должны использовать setSize (width, height).Несмотря на то, что класс Rectangle имеет поля для x, y, width и height, он не соответствует обычным соглашениям Java, когда поля делаются частными и используются общедоступные методы получения и установки.В этом случае вы можете получить доступ к полям напрямую и просто сказать containRec.x = whatever, но это плохая привычка.

Вы не хотите удалять (int) приведения, но вы определенно можете очиститьдо этого раздела.Вместо вызова rects.get (i) вы можете поместить в начало цикла строку с надписью Rectangle currentRect = rects.get(i); или еще лучше, используя цикл for-each.

1 голос
/ 16 ноября 2011

Полагаю, вы используете класс java.awt.Rectangle.У него нет метода setX (посмотрите на Javadocs, чтобы подтвердить это), но действительно объявляет, что это поле x общедоступно, поэтому вы можете просто установить его напрямую:

containRec.x = whatever;

То же самое относится и к y, конечно.Прямая установка открытых полей - это, как правило, Плохая вещь (как указал @Jordan Bently), но в этом случае это сработает.

Или вы можете использовать комбинацию setLocation, setBounds, setSize, setRect или setFrame.

РЕДАКТИРОВАТЬ: Вы можете избавиться от всех этих мерзких приведений, используя полностью целочисленную арифметику.Вместо использования getX(), который возвращает double, просто ищите поле x напрямую - это int.

Класс java.awt.Rectangle несколько неудобен в использовании.

1 голос
/ 16 ноября 2011

Извините, но мне пришлось посмеяться: D Бедный Мэтт: - * Вот ссылка на API: http://download.oracle.com/javase/1,5,0/docs/api/java/awt/Rectangle.html

Нет setX () или setY ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...