Member 14025358 Ответов: 1

Как я могу закодировать это на java


Представьте себе, что у нас есть ящик для хранения частиц. Первоначально мы помещаем случайным образом 3 частицы в эту коробку. После каждого шага эти частицы будут свободно перемещаться внутри коробки. Если две частицы сталкиваются, новая частица будет
помещается случайным образом в коробку.
Мы хотим смоделировать движение частиц за n шагов и подсчитать количество частиц в коробке.
Реализуйте коробку частиц (напишите класс коробки, класс для частицы) таким образом, чтобы
1. коробка имеет фиксированный размер: фиксированные ширина и высота
2. Каждая частица имеет положение (x, y), где 0 ≤ x ≤ ширина коробки и 0 ≤ y ≤ высота коробки

3. частица может двигаться в одном из нижеприведенных направлений, но не может выйти из коробки (20pts).
+ Север (уменьшение его y на 1),
+ Северо-восток (уменьшение его y на 1 и увеличение его x на 1),
+ Восток (увеличение его x на 1),
+ Юго-восток (увеличение его y на 1 и увеличение его x на 1)
+ Юг (увеличивая его на 1),
+ Юго-запад (увеличение его y на 1 и уменьшение его x на 1),
+ Запад (уменьшение его x на 1),
+ Северо-Запад (уменьшение его на 1, уменьшить х на 1)
Подсказка: объявите тип перечисления для направления
4. Если две частицы сталкиваются, новая частица будет помещена случайным образом в коробку
и класс для симуляции где для каждого шага,
5. он заставляет все частицы в коробке двигаться
6. он показывает количество частиц в коробке
7. он визуализирует коробку с частицами внутри *
-------------------------------
| * * * |
| * * * |
| * |
-------------------------------
одна частица = одна звезда
8. Найдите о шаблоне Синглтона и сделайте коробку как синглтон

Что я уже пробовал:

Я пишу код на java, но я только что создал коробку и не знаю, как сделать остальное. Помогите. Вот мой код:
коробка открытый класс
{
ширина частный int ;
частная высота int;

публичный ящик(int h, int w) {
высота = h;
ширина = w;

если(высота<0)
{
System.out.println("недопустимая высота. Установка на 1");
высота=1;

}
if(width<0)
{
System.out.println("недопустимая ширина. Установка на 1");
ширина=1;
}

}
public void drawline(int width, String s)
{
for (int i=0; i<width;i++)
{
Системы.из.печать(с);
}
}
public void drawhollowline (int width)
{
System.out.print("|");
drawline(ширина - 2, " ");
System.out.print("|");
}
public void drawbox(int height,int width)
{
drawline(ширина,"-");
Системы.из.код println();
for (int i=0;i<height;i++)
{
drawhollowline(ширина);
Системы.из.код println();
}
drawline(ширина,"-");
}

}

Member1x

Похоже, это своего рода домашнее задание. Так что вы должны выяснить это сами, чтобы узнать что-то. Задача уже близка к программированию, но все же некоторые подсказки есть:
- добавьте свойство в свой класс box для частиц внутри коробки
- создайте класс частиц со свойствами position; в конструкторе вы инициализируете его, чтобы дать ему позицию при создании
- тогда вам понадобится ваш класс моделирования:
+ ваш ящик инициализируется тремя частицами
+ на каждом шаге моделирования вы перемещаете каждую частицу со случайным направлением движения; подсказка enum означает, что вы можете получить доступ к каждой записи с именем или номером; у вас есть возможные направления, поэтому вам нужно случайное число от 0 до 7
+ после того, как вы переместили каждую частицу, вы должны проверить ее на столкновение; если столкновение, то создайте новую частицу
+ нарисуйте свою коробку с частицами
+ цикл до конца времени моделирования
- и не забудьте сделать свой ящик синглтоном (используйте статическое свойство)

Мы не предоставим вам полного решения. Но вы можете спросить о конкретных проблемах.

Удачи вам!

Member 14025358

Хорошо, спасибо

1 Ответов

Рейтинг:
1

CPallini

Цитата:
если(высота<0)
{
System.out.println("недопустимая высота. Установка на 1");
высота=1;

}
if(width<0)
{
System.out.println("недопустимая ширина. Установка на 1");
ширина=1;
}

Я думаю, вам следует использовать лучшие ограничения (например, не менее 20).
Необходимо разработать Particle класс с текущей позицией (x,y) и текущее направление (предлагаемое перечисление) в качестве переменных состояния.
Затем вы должны перемещать частицы, обрабатывать столкновения между частицами (просто, просто убедитесь, что частицы имеют одинаковое текущее положение) и столкновения между частицами и стенками коробки (требования ничего не говорят о том, что вы можете безопасно предположить обычное упругое поведение, например отражение направления x при ударе частицы о вертикальную стенку).


Member 14025358

Но как я могу сделать случайный ход и случайный спав

CPallini

Чтобы присвоить частицам случайные положения (либо начальные, либо вновь созданные после столкновений), сгенерируйте два случайных числа (X, Y) в диапазоне 0..(L-1) (где L-длина стороны коробки).
Чтобы присвоить каждой частице случайное направление, так как частицы могут иметь 8 направлений, сгенерируйте число в диапазоне 0..7.

Member 14025358

Хорошо, спасибо