OOP Grundlagen

Patrick_1

Grünschnabel
Huhu Ihr, ^^

Das Hier mein erster Beitrag deswegen möcht ich erstmal alle schön grüßen die mir hier bezüglich helfen können:

Also ich möchte gern ein Programm schreiben das mir 10 zufällige Punkte erstellt und ausgibt.

Mein Ansatz war ein Array aufzumachen meine Werte reinzuspeißen dies dann mit rekursion auf doppelte Punkte zu überprüfen und mit hilfe von nem Konstruktor grafisch darzustellen:
Code:
import java.awt.*;																//Bibliothek
import BreezyGUI.*;	
	

public class TolleSache1 extends GBFrame											//Neue Klasse wird erstellt
{	
																				//Array vom Typ Punkt wird erstellt
	private class Zahlen
	{
	int a;
	int b;

	
	}
	Zahlen[] Test = new Zahlen [10];
	
	
	public void generierePunkte (int anzahl)									//Methode erzeugt Punkte
	{
		for (int i=0; i<anzahl; i++)						
		{
		 int x = (int)(Math.random() * 10);										//erzeugt eine zufällige x koordinate
		 int y = (int)(Math.random() * 10);										//erzeugt eine zufällige y koordinate
		
		boolean Doppelt = Überprüfung(x,y,anzahl);								//ruft methode Überprüfen auf und überweist die koordinaten + der wie vielte punkt es ist
			
			if (Doppelt == true)												//wenn Doppelt = true
			{
			generierePunkte(anzahl);											//rufe dich selbst nochmal an der gleichen stelle i auf und mach neue koordinaten
			}
			else																//else nimm koordinaten und speicher sie
			{
		 	Test[i].a=x;														//im Array Test auf der stelle i wert x 
			Test[i].b=y;														//im Array Test auf der stelle i wert y 
			System.out.println("test"+anzahl);
			System.out.println("i="+i);
			System.out.println("x="+Test[i].a);
			
			}
		}
	}

	public boolean Überprüfung(int erzeugtesX, int erzeugtesY, int anzahl)		//Methode Überprüfen
	{
		for(int i=0; i<anzahl; i++)												//Läuft jeden bereits erzeugten Punkt ab 
		{
		
			if(Test[i].a==erzeugtesX && Test[i].b==erzeugtesY)					//Überprüft ob einer der Punkte doppelt vorhanden ist
			{
			return true;														//wenn vorhanden return true
			}
		} 
		return false;
	}


	public void paint (Graphics gHandle)										//Methode Paint
	{
	/*	int startX=50, startY=50, width=40, height=40;							//linke obere Ecke, Breite und Höhe vom Raster
			
		gHandle.setColor(Color.black);											//die Farbe schwarz wird gewählt
		for (int i=0; i<10; i++)												//i ist 1 ; i ist kleiner als 11 und i wird immer um eins erhöht
		{				
			gHandle.drawLine(startX, startY+(height*i), startX+(width*10), startY+(height*i));		//eine Linie des Koordinatensystems wird gezeichnet
		}	
		for (int i=0; i<10; i++)												//Kästchen links oben ...
		{
			gHandle.drawLine(startX+(width*i), startY, startX+(width*i), startY+(height*10));

		}
	*/	
		generierePunkte(9);														//ruft Methode generierePunkte(9) mit dem gefüllten Array
		for (int i=0; i<10; i++)
		{
		Punkt P = new Punkt (Test[i].a, Test[i].b, gHandle);					//Erzeugt neues Objekt Punkt über den Konstruktor Punkt
		}
	
	}
	
	
	
	
	


public static void main (String[] args)
	{	
		
		
		Frame frm = new TolleSache1();											//Erstellt ein Frame
		frm.setSize(600, 600);													//Fenstergröße
		frm.setTitle("Grafikausgabe");
		frm.setVisible(true);													//Sichtbarmachung des Frames
		
	
	}	

}

Und Nun noch die Klasse mit dem Konstruktor:
Code:
import java.awt.*;																//Bibliothek
import BreezyGUI.*;																//"Werkzeugkasten"

public class Punkt	extends GBFrame												//Klasse Punkt wird erstellt
{ 
	
	//int x;																	//KLasse Punkt verfügt über Variable x und y (Eigenschaften von Punkt)
	//int y;
	int PunktX;
	int PunktY;
	Punkt (int x, int y, Graphics gHandle)										//Konstruktor von Punkt = konstruiert einen Punkt
	{
		this.PunktX = x;														//Parameter von new Punkt (int,int, jawa.awt.Graphics) werden übergeben
		this.PunktY = y;
		ZeichnePunkte(gHandle);													//Ruft Methode ZeichnePunkte und übergibt gHandle
	}

	public void ZeichnePunkte (Graphics gHandle)								//ZeichnePunkte bekommt parameter gHandle
	{
		int x = this.PunktX;													//Da x nicht direkt übergeben werden kann wird es hier neu zugewiesen
		int y = this.PunktY;
		int startX=50, startY=50, width=40, height=40;	
		
		gHandle.setColor(Color.red);												//eine Farbe für die Punkte wird zugewiesen
		gHandle.fillArc(startX+(x*width)-4, startY+(y*height)-4, 10, 10, 0, 360);	//Punkt wird gezeichnet	
		
		
		
		
	}
}
Der Compiler zeigt mir keine Fehler =/ aber ich bekomm Exceptions beim Ausführen
woran kann das liegen?
 

zeja

Erfahrenes Mitglied
Was für Exceptions?

Erstmal noch ein paar Anmerkungen zu deinem Code. Es ist sehr wichtig sich auch gleich die richtige Schreibweise beim Programmieren anzugewöhnen. So werden Felder, Variablen und Parameter z.B. immer mit kleinem Anfangsbuchstaben geschrieben (doppelt statt doppelt). Genauso Methodennamen. Achte auch bitte darauf keine Umlaute zu verwenden. Das führt immer zu Problemen wenn das jemand anders öffnet der ein andere Encoding verwendet. Also ueberprüfe statt Überprüfung (es soll ja was tun.. abgesehen davon würde ich die Methode eher isDoppelt nennen, das sagt eher aus was sie tut. Eine Überprüfung könnte ja alles sein.). Packagenamen werden sogar komplett kleingeschrieben (breezygui).

Was ich nicht verstehe ist warum du in deiner generierePunkte die Methode erneut aufrufst wenn ein Punkt falsch ist... ?
 

Oliver Gierke

Erfahrenes Mitglied
Ganz mies ist auch ein Mischmasch aus Englisch und Deutsch. ;) Für die korrekte Formatierung sorgt im Eclipse eigentlich CMD + SHIFT + F. Kann man auch als SaveAction einstellen, dass es bei jedem Speichern automatisch ausgeführt wird.

@Zeja - ich glaub sowas lernt man erst, wenn man das erste mal von nem Kollegen / Vorgesetzten angeschissen wurde :p

REINHAUN!
 

Patrick_1

Grünschnabel
Also der Englisch deutsch Mischmasch sollte ned so das Problem sein ^^. Ich programmier das ned freiwillig sondern auf Anweisung meines Profs. hin und der hat kein Problem damit. Warum ich die Methode "generierePunkte" neu aufrufe wenn ein Punkt falsch ist? Naja ich will mir ja nicht zwei Punkt an einer Koordinate zeichnen lassen sprich, wenn der Punkt schon vorhanden is soll er sich an der Stelle "i" erneut aufrufen, zwei neue Werte für x und y erzeugen und wenn sie noch nicht vorhanden sind, meinem Arrayplatz "i" zuweisen. Oder starte ich damit meine gesamte Methode neu? also i = 0?
 

zeja

Erfahrenes Mitglied
Ja na klar tust du das. Kannst dir ja mit System.out.println mal ausgeben lassen was es macht. Trotzdem, wie lauten die Exceptions denn?

Abgesehen davon: Schlimm genug dass ein Prof damit kein Problem hat... genau das ist das Problem warum man an der Uni nur sehr unzureichend Programmieren lernt... was später echt problematisch sein kann wenn man in dem Bereich arbeiten will. Also machs lieber gleich ordentlich, es lohnt sich wirklich.
 

Patrick_1

Grünschnabel
Ich hab den Code nun verändert und statt einem Array das 2 Slots in einer Stelle hat einfach ein zwei dimensionales Array verwendet. Mit dieser Variante funktioniert es einwandfrei ohne Exeptions ohne garnichts weis ned warum = /. Danke für die Tipps bezüglich des Aufbau und wegen dem schreiben meines Programms ich werde mich dran halten =)