Nano Hash - криптовалюты, майнинг, программирование

Как написать java-программу для создания облака случайных точек?

У меня много проблем с этой программой, и мне было интересно, может ли кто-нибудь сказать мне, что я делаю неправильно... Вот подсказка: Реализуйте класс Cloud, который содержит список массивов объектов Point2D.Double. Методы поддержки

public void add(Point2D.Double aPoint)
public void draw (Graphics2D g2)

Нарисуйте каждую точку в виде крошечного круга. Напишите графическое приложение, рисующее облако из 100 случайных точек.

Вот что у меня есть, но на самом деле это ничего не даст, я просто очень запутался, и мне нужна любая помощь!

Облако.java:

import java.awt.*;
import java.util.*;
import java.awt.geom.Point2D;
import java.awt.geom.Ellipse2D;

public class Cloud {    
    public void draw(Graphics2D g)
    {
        Random rand = new Random();
        Graphics2D g2 = (Graphics2D) g;
        for (int i=0;i<=20;i++)
        {
            this.add(new Point2D.Double(rand.nextInt(400)+1,rand.nextInt(300)+1));
        }
        for (int i=0; i<list.size();i++) 
        {
            Ellipse2D.Double circle = new         Ellipse2D.Double(list.get(i).getX()-5,list.get(i).getY()-5, 10, 10);
            g2.draw(circle);
        }
    }
    public void add(Point2D.Double aPoint)
    {
        list.add(aPoint);
    }

    private ArrayList<Point2D.Double> list = new ArrayList<Point2D.Double>();
}

CloudTest.java:

import java.applet.Applet;
import java.awt.*;
import java.awt.geom.Point2D;
import java.util.*;

public class CloudTest extends Applet
{
    public void paint(Graphics2D g)
    {
        Graphics2D g1 = (Graphics2D) g;
        Cloud myCloud = new Cloud();
        myCloud.draw(g1);
    }
}
19.08.2014

  • Ну, вы ничего не добавляете в облако... 19.08.2014
  • И вы создаете новое облако в методе рисования, что, вероятно, не очень хорошая идея. Лучше создать всего одно облако в классе, а затем использовать этот экземпляр внутри Paint. 19.08.2014
  • И вы на самом деле неправильно переопределили метод paint, поэтому он никогда не будет вызван... 19.08.2014
  • @MadProgrammer: Да, действительно! 19.08.2014
  • 1) Зачем кодировать апплет? Если это связано со спецификацией вашего преподавателя, отправьте его на Почему учителя компьютерных наук должны прекратить преподавать Java-апплеты. 2) Зачем использовать компоненты AWT, а не Swing? См. этот ответ по многим веским причинам отказаться от AWT. 19.08.2014

Ответы:


1

По сути, вероятно, в вашем методе init вам действительно нужно создать случайную серию данных...

Взгляните на java.util.Random для начала.

По сути, вам нужно создать случайную позицию x с верхней границей, не превышающей ширину апплета, и случайную позицию y, с верхней границей, не превышающей высоту апплета, например...

private Cloud cloud = new Cloud();

//...Probably within the init method...
Random rnd = new Random();
int cloudDensity = 10 + rnd.nextInt(990);
for (int index = 0; index < cloudDensity; index++) {

    int x = rnd.nextInt(getWidth());
    int y = rnd.nextInt(getHeight());
    cloud.add(new Point2D.Double(x, y));

}

Затем в вашем методе paint вам нужно нарисовать это облако...

    @Override
    public void paint(Graphics g)
    {    
        super.paint(g);
        Graphics2D g2d = (Graphics2D)g.create();
        myCloud.draw(g2d);
        g2d.dispose();
    }

Теперь метод paint для Applet ожидает экземпляр Graphics, а не Graphcis2D, иначе метод никогда не будет окрашен. Именно здесь аннотация @Override так важна, поскольку она вызовет ошибку времени компиляции, если вы сделали что-то не так при попытке переопределить метод.

19.08.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..