Home > Informatik > Optimierungsprobleme

Workshop "Nearest neighbour" - 1

Teil 1 - Teil 2 - Teil 3 - Teil 4 - Teil 5

Die Klasse Stadt

Zielsetzung

Es soll eine Klasse Stadt geschrieben werden, die für das Zeichnen der einzelnen Städte verantwortlich ist. Jede Stadt soll in einer Java-Anwendung als roter Kreis mit einem schwarzen Rand dargestellt werden.

asdf

Die beiden Klassen Stadt und Anwendung

Attribute

Die Koordinaten der Städte werden sowohl in Pixeln gespeichert, daher sind zwei entsprechende Attribute notwendig.

Ein drittes Attribut verwaltet die Information, ob sich diese Stadt bereits in einer Rundreise befindet oder nicht.

Methoden

Der Konstruktor erhält als Parameter die Koordinaten der Stadt in Pixeln.

Eine paint()-Methode dient zum Zeichnen der Stadt in der Java-Anwendung.

Quelltext

import java.awt.*;

public class Stadt
{
    public int x,y;
    public boolean inTour;
    
    public Stadt(int pX, int pY)
    {
        x = pX;
        y = pY;
        inTour = false;
    }
    
    public void paint(Graphics g)
    {
       g.setColor(Color.RED);
       g.fillOval(x-7,y-7,14,14);
       g.setColor(Color.BLACK);
       g.drawOval(x-7,y-7,14,14);
    }
}
Erläuterung

Ich denke, dieser Quelltext muss nicht weiter erläutert werden. Die Klasse ist sehr einfach gestrickt, sie dient lediglich zur Verwaltung von Stadt-Objekten und stellt eine Methode zum Zeichnen einer Stadt bereit

Die Klasse Anwendung

Zielsetzung:

Diese Klasse steht für das Hauptprogramm des Projektes. Hier wird alles verwaltet und am Ende - im Teil 5 - wird die berechnete "optimale" Tour graphisch dargestellt.

import java.awt.*;
import javax.swing.*;

public class Anwendung extends JFrame
{
    Stadt s1, s2;
    
    public Anwendung()
    {
        initStaedte();      // muss am Anfang erfolgen!   
        setSize(500,500);
        setTitle("TSP: Nearest Neighbour-Methode");
        setResizable(false);
        setVisible(true);
    }

    public void initStaedte()
    {
       s1 = new Stadt(200,200);
       s2 = new Stadt(400,340);
    }
    
    public void paint(Graphics g)
    {
       s1.paint(g);
       s2.paint(g);
    }

    public static void main(String[] args) 
    {
        new Anwendung();
    }
}
Erläuterungen

Es handelt sich um eine minimale Java-Anwendung ohne Buttons und andere Komponenten. Es wird lediglich ein 500 x 500 Pixel großes Fenster generiert, in dem die Städte angezeigt werden können.

Wichtig ist, dass die Objekte der Klasse Stadt möglichst früh im Konstruktor der Anwendung initialisiert werden. Ich hatte die Zeile

initStaedte();

zunächst ganz am Ende des Konstruktors stehen, dann wurde aber nur ein leeres Fenster angezeigt. Offensichtlich ist es so, dass das Zeichnen des Fensters nach den ganzen set-Methoden im Konstruktor abgeschlossen ist; auch die paint()-Methode scheint dann schon aufgerufen worden zu sein. Steht also die Initialisierung der Städte am Ende des Konstruktors, wurde die paint()-Methode bereits ausgeführt, und die Städte können nicht mehr gezeichnet werden.