Objektdaten sinnvoll in Array Speichern

Status
Nicht offen für weitere Antworten.

Tomes J.

Mitglied
Hi,
mal folgender Beispielcode:

Code:
import java.applet.Applet;
import java.awt.*;
public class MyApplet extends Applet {
	Kreis k1, k2, k3;
	Viereck v;

	public void start() {
		k1 = new Kreis(10, 10, 30, 30, Color.RED);
		k2 = new Kreis(45, 10, 30, 30, Color.BLUE);
		k3 = new Kreis(80, 10, 30, 30, Color.ORANGE);
		v = new Viereck(10, 50, 20, 40, Color.GRAY);
	}

	public void paint(Graphics g) {
		k1.paint(g);
		k2.paint(g);
		k3.paint(g);
		v.paint(g);
	}
}

Code:
public class Kreis {
	private int x = 0;
	private int y = 0;
	private int breite = 0;
	private int hoehe = 0;
	private java.awt.Color farbe;

	public Kreis(int x, int y, int breite, int hoehe, java.awt.Color farbe) {
		this.x = x;
		this.y = y;
		this.breite = breite;
		this.hoehe = hoehe;
		this.farbe = farbe;
	}

	public void paint(java.awt.Graphics g) {
		g.setColor(this.farbe);
		g.fillOval(this.x, this.y, this.breite, this.hoehe);
	}
}

Code:
public class Viereck {
		private int x = 0;
		private int y = 0;
		private int breite = 0;
		private int hoehe = 0;
		private java.awt.Color farbe;

		public Viereck(int x, int y, int breite, int hoehe, java.awt.Color farbe) {
			this.x = x;
			this.y = y;
			this.breite = breite;
			this.hoehe = hoehe;
			this.farbe = farbe;
		}

		public void paint(java.awt.Graphics g) {
			g.setColor(this.farbe);
			g.fillRect(this.x, this.y, this.breite, this.hoehe);
		}
}

Ich möchte die Daten von k1, k2 und k3 in einem Array Speichern (muss später noch feststellen können ob ein Mausklick in einem der Kreise lag und wenn ja in welchem Kreis)
und mit dem Array möchte ich die 3 Objekte auf erstellen(for-Schleife oder so).

hat Jemand eine Idee wie man das elegant lösen kann?
 

Redfrettchen

Bekanntes Mitglied
Hi,
wenn du die Objekte mit verschiedenen Werten initialisierst, dann kannst du das mit der Schleife vergessen (außer die Werte lassen sich in Abhängigkeit der Zählvariable angeben).
Für deine Test benötigst du allerdings noch Getter für die internen Variablen oder eine Methode, die die Überprüfung vornimmt.

Code:
Kreis[] kreise = new Kreis[3];
kreise[0] = new Kreis(10, 10, 30, 30, Color.RED); 
kreise[1] = new Kreis(45, 10, 30, 30, Color.BLUE); 
kreise[2] = new Kreis(80, 10, 30, 30, Color.ORANGE);
 
S

SlaterB

Gast
> Ich möchte die Daten von k1, k2 und k3 in einem Array Speicher

na dann immer rein damit
array[0] = k1;
usw.
bzw. direkt:
array[0] = new Kreis(..);

> und mit dem Array möchte ich die 3 Objekte auf erstellen(for-Schleife oder so).

was ist 'auf erstellen' ? 'auch erstellen'?
ein Array erzeugt keine anderen Objekte,
aber mit einem Array und einer for-Schleife läßt sich einiges vereinfachen, richtig erkannt,
mit Kreisen und Vierecken wird schwierig,
nur bei Kreisen z.B.
Code:
for (i..) {
  array[i] = new Kreis (i*40, 20, .., farbe[i]);
}
da braucht es natürlich ein schlüssiges Konzept,
z.B. müssen die Farben vorher in einem Array vorliegen oder ähnliche Fragen geklärt sein
 

Tomes J.

Mitglied
Code:
Kreis[] kreise = new Kreis[3];
kreise[0] = new Kreis(10, 10, 30, 30, Color.RED);
kreise[1] = new Kreis(45, 10, 30, 30, Color.BLUE);
kreise[2] = new Kreis(80, 10, 30, 30, Color.ORANGE);
[/code]

da macht Eclipse alles rot :(

Ich will später noch überprüfen ob ein MouseEvent in einem Kreis lag und wenn ja in welchem,
dazu brauch ich doch die Koordinaten.
Wie komm ich denn da wieder ran wenn ich die Daten so abspeicher?
 
S

SlaterB

Gast
erstaunlich, wie lauten denn die Fehlermeldungen?
geht folgendes?

k1 = new Kreis(10, 10, 30, 30, Color.RED);
Kreis[] kreise = new Kreis[3];
kreise[0] = k1;


------------

an die Daten kommst du wieder ran mit
Kreis kreis = kreise[0];
// do something with kreis

ein Array ist also keine Wundertüte sondern nur ein Transportmittel ;)
 
S

SlaterB

Gast
tja, liegt vielleicht am Code drumherum, poste bisschen mehr,
ist so zunächst nicht zu erkennen, oder ich bin blind

die alten Befehlr gehen noch?
bei mir geht folgendes:

Code:
import java.awt.Color;

public class Test {

	public static void main(String[] args) throws Exception {
		Kreis[] kreise = new Kreis[3];
		kreise[0] = new Kreis(10, 10, 30, 30, Color.RED);
		kreise[1] = new Kreis(45, 10, 30, 30, Color.BLUE);
		kreise[2] = new Kreis(80, 10, 30, 30, Color.ORANGE);
	}

}

class Kreis {

	public Kreis(int i, int j, int k, int l, Color color) {
	}

}
 

Tomes J.

Mitglied
so hatte ich es:

Code:
import java.applet.Applet;
import java.awt.*;
public class MyApplet extends Applet {
	
    Kreis[] kreise = new Kreis[3];
    kreise[0] = new Kreis(10, 10, 30, 30, Color.RED);
    kreise[1] = new Kreis(45, 10, 30, 30, Color.BLUE);
    kreise[2] = new Kreis(80, 10, 30, 30, Color.ORANGE); 
	
	Kreis k1, k2, k3;
	Viereck v;

	public void start() {
		k1 = new Kreis(10, 10, 30, 30, Color.RED);
		k2 = new Kreis(45, 10, 30, 30, Color.BLUE);
		k3 = new Kreis(80, 10, 30, 30, Color.ORANGE);
		v = new Viereck(10, 50, 20, 40, Color.GRAY);
	}

	public void paint(Graphics g) {
		k1.paint(g);
		k2.paint(g);
		k3.paint(g);
		v.paint(g);
	}
}

public class Kreis {
	private int x = 0;
	private int y = 0;
	private int breite = 0;
	private int hoehe = 0;
	private java.awt.Color farbe;

	public Kreis(int x, int y, int breite, int hoehe, java.awt.Color farbe) {
		this.x = x;
		this.y = y;
		this.breite = breite;
		this.hoehe = hoehe;
		this.farbe = farbe;
	}

	public void paint(java.awt.Graphics g) {
		g.setColor(this.farbe);
		g.fillOval(this.x, this.y, this.breite, this.hoehe);
	}
}

public class Viereck {
		private int x = 0;
		private int y = 0;
		private int breite = 0;
		private int hoehe = 0;
		private java.awt.Color farbe;

		public Viereck(int x, int y, int breite, int hoehe, java.awt.Color farbe) {
			this.x = x;
			this.y = y;
			this.breite = breite;
			this.hoehe = hoehe;
			this.farbe = farbe;
		}

		public void paint(java.awt.Graphics g) {
			g.setColor(this.farbe);
			g.fillRect(this.x, this.y, this.breite, this.hoehe);
		}
}
 
S

SlaterB

Gast
dann dürfte aber

Code:
public class MyApplet extends Applet {
   
    k1 = new Kreis(10, 10, 30, 30, Color.RED);
   
   Kreis k1, k2, k3;
   Viereck v; 
...

genausowenig funktioniern, immer erst die alten Sachen probieren

nun ja, also einmal muss man das lernen dann weiß man es hoffentlich:
man darf normale Befehle nicht einfach so in die Klasse schreiben,
die gehören in einen Konstruktor oder in eine Operation,
z.B. da wo früher
k1 = new Kreis(10, 10, 30, 30, Color.RED);
stand, in der start()-Operation,
das ist selbstverständlich der richtige Platz auch weiterhin,
wieso wolltest du woanders hin? ;)
 

Tomes J.

Mitglied
Code:
import java.applet.Applet;
import java.awt.*;
public class MyApplet extends Applet {
	Kreis k1, k2, k3;
	Viereck v;

	public void start() {
		
	    Kreis[] kreise = new Kreis[3];
	    kreise[0] = new Kreis(10, 10, 30, 30, Color.RED);
	    kreise[1] = new Kreis(45, 10, 30, 30, Color.BLUE);
	    kreise[2] = new Kreis(80, 10, 30, 30, Color.ORANGE); 
	    
	    k1 = kreise[0];
	    k2 = kreise[1];
	    k3 = kreise[2];
		v = new Viereck(10, 50, 20, 40, Color.GRAY);
	}

	public void paint(Graphics g) {
		k1.paint(g);
		k2.paint(g);
		k3.paint(g);
		v.paint(g);
	}
}

Ok, das geht soweit :)

danke
 

Tomes J.

Mitglied
Code:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MyApplet extends Applet implements MouseListener {
	Kreis k1, k2, k3;
	Viereck v;
        public void init() {
	    addMouseListener(this);
        }
	public void start() {
		
	    Kreis[] kreise = new Kreis[3];
	    kreise[0] = new Kreis(10, 10, 30, 30, Color.RED);
	    kreise[1] = new Kreis(45, 10, 30, 30, Color.BLUE);
	    kreise[2] = new Kreis(80, 10, 30, 30, Color.ORANGE); 
	    
	    k1 = kreise[0];
	    k2 = kreise[1];
	    k3 = kreise[2];
		v = new Viereck(10, 50, 20, 40, Color.GRAY);
	}
	public void mouseClicked(MouseEvent event){
		int xClick, yClick;
		
		xClick = event.getX();
		yClick = event.getY();
		
		k1.setColor();

		repaint();
	}
	public void mouseEntered(MouseEvent event){ }
	public void mouseExited(MouseEvent event){ }
	public void mousePressed(MouseEvent event){ }
	public void mouseReleased(MouseEvent event){ }
	
	public void paint(Graphics g) {
		k1.paint(g);
		k2.paint(g);
		k3.paint(g);
		v.paint(g);
	}
}

public class Kreis {
	private int x = 0;
	private int y = 0;
	private int breite = 0;
	private int hoehe = 0;
	private java.awt.Color farbe;

	public Kreis(int x, int y, int breite, int hoehe, java.awt.Color farbe) {
		this.x = x;
		this.y = y;
		this.breite = breite;
		this.hoehe = hoehe;
		this.farbe = farbe;
	}

	public void setColor() {
		this.farbe = java.awt.Color.BLUE;
	}
	public void paint(java.awt.Graphics g) {
		g.setColor(this.farbe);
		g.fillOval(this.x, this.y, this.breite, this.hoehe);
	}
}

public class Viereck {
		private int x = 0;
		private int y = 0;
		private int breite = 0;
		private int hoehe = 0;
		private java.awt.Color farbe;

		public Viereck(int x, int y, int breite, int hoehe, java.awt.Color farbe) {
			this.x = x;
			this.y = y;
			this.breite = breite;
			this.hoehe = hoehe;
			this.farbe = farbe;
		}

		public void paint(java.awt.Graphics g) {
			g.setColor(this.farbe);
			g.fillRect(this.x, this.y, this.breite, this.hoehe);
		}
}


sooo :)

wie bekomm ich denn nun raus, auf welchen Kreis geklickt wurde?
 
S

SlaterB

Gast
die Liste der Kreise duchgehen (Schleife) und für jeden prüfen ob die Mauskoordinaten da drin sind,
am bestem in einer Operation in der Klasse Kreis,

bisschen Mathematik ;)
 

Tomes J.

Mitglied
Ok,

ich geh mein Array keise durch und stelle fest das im array
kreise[1](eigentlich ja kreis2) der Kreis geklickt wurde...

kreise[1].setColor();
geht nicht
 

Tomes J.

Mitglied
Moin,
mir fällt gerade auf das ich die geklickten Koordinaten garnicht mit den der Objekte vergleichen kann weil ich die
nicht ansprechen kann....
kreise[1].x geht ja nicht.

Wie könnte man das jetzt machen?
 

Redfrettchen

Bekanntes Mitglied
Ich zitiere mich ja nur ungern selbst, aber
Redfrettchen hat gesagt.:
Für deine Test benötigst du allerdings noch Getter für die internen Variablen oder eine Methode, die die Überprüfung vornimmt.

Also zum Beispiel:
Code:
public class Kreis {
    // ...
    public boolean contains(int x, int y) {
        return (Math.sqrt((x-this.x)*(x-this.x)+(y-this.y)*(y-this.y))<=breite/2);
    }
}
btw, ein Kreis sollte besser über seinen Radius als über Breite und Höhe definiert werden.
 

Tomes J.

Mitglied
Hi,
ja das habe ich auch nicht vergessen
aber wie soll ich diese Methode in meiner for-Schleife aufrufen?
Code:
for (int i = 0; i <= 2 ; i++) {
kreise[i].contains ..
}
 

Redfrettchen

Bekanntes Mitglied
Code:
   public void mouseClicked(MouseEvent event){ 
      int xClick, yClick; 
       
      xClick = event.getX(); 
      yClick = event.getY(); 
      
      for (int i=0; i<3; i++) {
          if (kreise[i].contains(xClick,yClick)) {
              // mach was
          }
      }
      // ...
   }
 
S

SlaterB

Gast
bevor du sowas kompliziertes wie contains ausprobierst,
vergewissere dich doch erst, dass das Array kreise überhaupt da ist?!

durchlaufe es einmal, gib die Länge aus, gibt die Objekte einmal aus..,

Kreis[] kreise = new Kreis[3];
ist nur lokal in der Operation start definiert,
dass muss in der Klasse stehen!
(aber nicht die anderen Befehle aus start)
 

Redfrettchen

Bekanntes Mitglied
Tomes J. hat gesagt.:
Eclipse Fehlermeldung:
kreise connot be resolved
>.>
Natürlich muss die gesamte Klasse auf das Array zugreifen können. Sonst hat es wenig Sinn... Am besten ersetzt du die einzelnen Variablen k1, k2 und k3 durch das Array (alles was vorher auf die Variablen zugegriffen hat, muss jetzt natürlich mit dem Array arbeiten).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Ist Ableiten hier sinnvoll Java Basics - Anfänger-Themen 5
N Android Studio notwendig oder sinnvoll? Java Basics - Anfänger-Themen 7
L Wie testet man (selbstgeschriebene) Listen sinnvoll? Java Basics - Anfänger-Themen 2
U Methoden Code sinnvoll in Methoden einteilen Java Basics - Anfänger-Themen 2
G Wozu ist die Methode offsetByCodePoints(int, int) beim StringBuilder sinnvoll? Java Basics - Anfänger-Themen 1
TheMenox Methoden Auslagerung von Code aus der "main" Methode sinnvoll? Java Basics - Anfänger-Themen 70
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
D Wie baue ich sinnvoll eine Klasse, genauer die Methodenaufrufe auf? Java Basics - Anfänger-Themen 4
N Interface Interface (sinnvoll) erzeugen Java Basics - Anfänger-Themen 8
H Wieviele Objekte gleichzeitig sind sinnvoll? Java Basics - Anfänger-Themen 4
J Erste Schritte ArrayLIst sinnvoll? Java Basics - Anfänger-Themen 4
J Datentypen Objekt aus ArrayList sinnvoll übergeben Java Basics - Anfänger-Themen 9
S Taschenrechner in Java - sinnvoll? Java Basics - Anfänger-Themen 3
M Problem: JSP für Zugriff auf Oracle-Server/Datenbank - sinnvoll? Java Basics - Anfänger-Themen 35
X Singleton - In diesem Fall sinnvoll? Java Basics - Anfänger-Themen 22
G frage zur if bedigung: sinnvoll ? Java Basics - Anfänger-Themen 3
0x7F800000 zwei adjazenzlisten für jeden knoten eines graphen sinnvoll? Java Basics - Anfänger-Themen 17
hdi Code-Schnipsel: ist das sinnvoll oder dumm? Java Basics - Anfänger-Themen 2
R Einteilung von Klassen: was ist sinnvoll? Java Basics - Anfänger-Themen 2
D do-while - Sinnvoll? Java Basics - Anfänger-Themen 19
G AOP sinnvoll? Java Basics - Anfänger-Themen 4
S Funktion hier sinnvoll ? Java Basics - Anfänger-Themen 4
T ein MouseListener pro Objekt sinnvoll? Java Basics - Anfänger-Themen 4
M OOP frage, private variablen default-wert zuweisen sinnvoll? Java Basics - Anfänger-Themen 5
D Fehlerbehandlungen, wie am besten sinnvoll einsetzen? Java Basics - Anfänger-Themen 6
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
G Klasse zu groß (>3000 codezeilen). wie sinnvoll strukturi Java Basics - Anfänger-Themen 9
A Zeichenkette teilen mit Substring oder Char Array Java Basics - Anfänger-Themen 14
A 6. Element aus einem Array zurückgeben Java Basics - Anfänger-Themen 1
A Was bedeutet bei einem Array "int a [MAX][MAX];", Java Basics - Anfänger-Themen 7
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18

Ähnliche Java Themen


Oben