Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180

Не пойму как через цикл выводится движение и отображение прямоугольника

10.02.2014, 14:29. Показов 1457. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Изучаю последнюю главу многопоточности (Хорстман). В примере приводится небольшая программка которая отображает движение и отскоки прямоугольника определенное количество раз. Ниже приведен код 3-ех файлов. Подскажите пожалуйста что нам дает цикл
Java
1
for (int i = 1; i <= STEPS; i++)
? То что в цикле у нас рисуется и отображается прямоугольник это понятно, но веть i и STEPS в самом цикле не встречается... Что в этом цикле на самом деле задается и как работает (объясните попроще пожалуйста). Спасибо.
Код:
Bounce.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
/**
 * Shows an animated bouncing ball.
 * @version 1.33 2007-05-17
 * @author Cay Horstmann
 */
public class Bounce
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               JFrame frame = new BounceFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}
 
/**
 * The frame with ball component and buttons.
 */
class BounceFrame extends JFrame
{
   /**
    * Constructs the frame with the component for showing the bouncing ball and Start and Close
    * buttons
    */
   public BounceFrame()
   {
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      setTitle("Bounce");
 
      comp = new BallComponent();
      add(comp, BorderLayout.CENTER);
      JPanel buttonPanel = new JPanel();
      addButton(buttonPanel, "Start", new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               addBall();
            }
         });
 
      addButton(buttonPanel, "Close", new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               System.exit(0);
            }
         });
      add(buttonPanel, BorderLayout.SOUTH);
   }
 
   /**
    * Adds a button to a container.
    * @param c the container
    * @param title the button title
    * @param listener the action listener for the button
    */
   public void addButton(Container c, String title, ActionListener listener)
   {
      JButton button = new JButton(title);
      c.add(button);
      button.addActionListener(listener);
   }
 
   /**
    * Adds a bouncing ball to the panel and makes it bounce 1,000 times.
    */
   public void addBall()
   {
      try
      {
         Ball ball = new Ball();
         comp.add(ball);
 
         for (int i = 1; i <= STEPS; i++)
         {
            ball.move(comp.getBounds());
            comp.paint(comp.getGraphics());
            Thread.sleep(DELAY);
         }
      }
      catch (InterruptedException e)
      {
      }
   }
 
   private BallComponent comp;
   public static final int DEFAULT_WIDTH = 450;
   public static final int DEFAULT_HEIGHT = 350;
   public static final int STEPS = 1000;
   public static final int DELAY = 3;
}
BallComponent.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.awt.*;
import java.util.*;
import javax.swing.*;
 
/**
 * The component that draws the balls.
 * @version 1.33 2007-05-17
 * @author Cay Horstmann
 */
public class BallComponent extends JPanel
{
   /**
    * Add a ball to the component.
    * @param b the ball to add
    */
   public void add(Ball b)
   {
      balls.add(b);
   }
 
   public void paintComponent(Graphics g)
   {
      super.paintComponent(g); // erase background
      Graphics2D g2 = (Graphics2D) g;
      for (Ball b : balls)
      {
         g2.fill(b.getShape());
      }
   }
 
   private ArrayList<Ball> balls = new ArrayList<Ball>();
}
Ball.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.awt.geom.*;
 
/**
 * A ball that moves and bounces off the edges of a rectangle
 * @version 1.33 2007-05-17
 * @author Cay Horstmann
 */
public class Ball
{
   /**
    * Moves the ball to the next position, reversing direction if it hits one of the edges
    */
   public void move(Rectangle2D bounds)
   {
      x += dx;
      y += dy;
      if (x < bounds.getMinX())
      {
         x = bounds.getMinX();
         dx = -dx;
      }
      if (x + XSIZE >= bounds.getMaxX())
      {
         x = bounds.getMaxX() - XSIZE;
         dx = -dx;
      }
      if (y < bounds.getMinY())
      {
         y = bounds.getMinY();
         dy = -dy;
      }
      if (y + YSIZE >= bounds.getMaxY())
      {
         y = bounds.getMaxY() - YSIZE;
         dy = -dy;
      }
   }
 
   /**
    * Gets the shape of the ball at its current position.
    */
   public Ellipse2D getShape()
   {
      return new Ellipse2D.Double(x, y, XSIZE, YSIZE);
   }
 
   private static final int XSIZE = 15;
   private static final int YSIZE = 15;
   private double x = 0;
   private double y = 0;
   private double dx = 1;
   private double dy = 1;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2014, 14:29
Ответы с готовыми решениями:

Движение символа через цикл
Помогите написать программу движения смайлика по экрану осуществляемого с помощью цикла.

не пойму как создать цикл
как сделать так что бы total`ы суммировались и присваивались переменной all, что бы вывести ИТОГ например, что бы каждый total слаживал к...

Не пойму как работает цикл
for(var i=1; i&lt;9;i++){ document.write(&quot;Квадрат&quot; + i + &quot;равен&quot; + i*i + &quot;&lt;br/&gt;&quot;); } for(var i=1; i&lt;9;i++){ ...

4
Java, C# - Expert
 Аватар для IceSqueez
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
10.02.2014, 14:45
Цитата Сообщение от yourfanat Посмотреть сообщение
но веть i и STEPS в самом цикле не встречается...
Найдите человека который вам сказал что они должны обязательно встречаться в теле цикла и киньте в него камень. Или вы не когда не сталкивались с такой ситуацией ?? (пример)
Java
1
2
3
4
5
6
7
8
9
int i = 0;
int max = 100;
int step = 2;
for (;;) {
   if (i > max) {
      break;
   }
   i+= step;
}
Думаю смысл понятен. А сам цикл просто бегает количество раз сколько ему скажут вот эта переменная:
Java
1
public static final int STEPS = 1000;
И просто перемещает ball, перерисовывает компоненту и делает задержку в цикле равным
Java
1
public static final int DELAY = 3;
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
10.02.2014, 14:46  [ТС]
Есть предположение, что за с каждой итерацией i выполняется выражение
Java
1
2
x += dx;
y += dy;
За счет чего и выполняется движение прямоугольника. Это правильно?
0
Java, C# - Expert
 Аватар для IceSqueez
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
10.02.2014, 14:51
Цитата Сообщение от yourfanat Посмотреть сообщение
Это правильно?
Естественно, ведь Вы в цикле вызываете метод move объекта ball.
1
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
10.02.2014, 14:56  [ТС]
Спасибо. Все вроде ясно) Просто раньше обычно если в цикле я работал с i, то она у меня была в коде... Немного смутило это....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2014, 14:56
Помогаю со студенческими работами здесь

Не пойму, как изменить код, чтобы читал следующий цикл
Целое положительное число m записывается в 16-ой системе счисления и разряды в этой записи переставляются в обратном порядке....

Движение прямоугольника
Привет, друзья! Извините, не могли бы вы мне помочь, нужно сделать движение квадрата размером 32х32 (например, направо по оси х)...

Движение прямоугольника
Помогите дополнить код, пожалуйста А именно чтобы при нажатии на кнопку Button_Click_2, MyReg рандомно менял свое положение. using...

Движение прямоугольника
Помогите, пожалуйста. Нужно написать программу на Winapi, позволяющую передвигать с помощью клавиатуры и мыши окрашенный прямоугольник...

Движение прямоугольника
Здравствуйте! У меня проблема с этой работой. Программа идет. Но прямоугольник движется по диагонали,а мне нужно,чтобы он двигался по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru