verschiedene Farben, die mit Java erstellen worden, mit den Augen unterscheiden ****

Nein, er meint, dass du vor den gesamten Quellcode hier im Forum [code=java] schreiben sollst, und danach [/code].

Übrigens hat das nicht Fabio geschrieben, sondern genodeftest.

Und was ist an einem println schlechter Stil?
 
Hallo an euch alle also ich bin seit ein oder 2 Tagen hier also bin neu hier daher.

mit System.out.println(); viele sagen soll man nicht einsetzen
wenn man programmiert .

es gibt alternative, die man benutzen kann.

danke an allen.

grüße
 
@ottens: Kein Problem. Ich habe gemeint, dass du vor deinen Code [code=java] schreiben sollst, und ganz ans Ende von deinem Code [/code]. Das sieht dann mit deinem Code von oben so aus:

Java:
public void paintComponent(Graphics gr) {
 super.paintComponent(gr);
 Graphics2D g2d = (Graphics2D) gr;

 farbe = getNewColor();
 // wenn die fARBE ODER eine ähnliche SCON DA IST, dann neue Farbe erstellen 
 while ((semiColorIsSavedToList(farbe) || liste.contains(farbe))){
 farbe = getNewColor();
 }
 liste.add(farbe);
 g2d.setColor(farbe);
 g2d.drawString(" neue Farbe ",250 , 20);
 g2d.fillOval(250, 20, 200, 200);

 }
 public boolean semiColorIsSavedToList(Color farbe) {
 for(int index = 0 ; index < liste.size() -1; index++ ){
 Color pool = liste.get(index);
 boolean erg =semiColorExist(farbe, pool);
 return erg;
 }

 public boolean semiColorExist(Color farbe, Color pool){
 int r = Math.abs(farbe.getRed() - pool.getRed());
 int g = Math.abs(farbe.getGreen() - pool.getGreen());
 int b = Math.abs(farbe.getBlue() - pool.getBlue());
 // dieferenz zwiscjen den Farben >= 50 
 if( r <= 50 || g <= 50 || b <= 50){
 return true;
 }
 return false;
 }
 public Color getNewColor(){
 Random rnd = new Random();
 int rRnd = rnd.nextInt(256);
 int gRnd = rnd.nextInt(256);
 int bRnd = rnd.nextInt(256);
 // keine helle Farben 
 while((rRnd > 210) || (Math.abs(rRnd - vorfarbe.getRed())< 50)){
 rRnd = rnd.nextInt(256); 
 } 
 while((gRnd > 200) || (Math.abs(gRnd - vorfarbe.getGreen())< 50)){
 gRnd = rnd.nextInt(256); 
 }
 while(bRnd < 150 || (Math.abs(bRnd - vorfarbe.getBlue())< 50)){
 bRnd = rnd.nextInt(256); 
 }

 Color farbe = new Color(rRnd,gRnd,bRnd);
 return farbe;
 }
Der Vorteil ist, dass die Syntax des Java-Codes farblich hervorgehoben wird. Das verbessert die Lesbarkeit. Außerdem ist dann offensichtlich, wo der Code beginnt/endet.

Oder kurz (so wie es in meiner Signatur steht) :
Aus
[code=java]System.out.println("Hallo");[/code]
wird dann
Java:
System.out.println("Hallo");
 
Zuletzt bearbeitet:
danke genodeftest für die Mühe es ist echt lieb, aber hat jemand für mein Problem eine
Lösung vielleicht ****

Grüße

Ottens
 
Wenn du den Bitten jetzt auch noch nachkommen würdest, wäre schon.
Vor allem die Einrückungen...

Bearbeite deinen Beitrag oben. Ist doch wirklich nicht viel zu tun.
java vorne und /java hinten und den Code nocheinmal von der IDE reinkopieren.

Dann wird das viel einfacher zu lesen.
Keiner hier hat Lust dreimal so lange herumzurätseln, als nötig wäre.
 
Also wenn du die Linientypen nicht noch mit verändern kannst, weil die schon vergeben sind oder sonstiges, dann wird es wohl eher schwierig. Du brauchst zwar nur >200 Farben, aber das Problem liegt beim menschlichen Auge. Wir können numal die Farben nur schwer auseinander halten, sobald sie fast den selben Farbtypen haben. Von daher bin ich fast der Meinung, dass es für dein Problem keine Lösung geben wird.
Außer ich habe irgendetwas übersehen.

Gruß

Fabio
 
Doch, das muss sich lösen lassen.
Ist die Anzahl der Farben, die du brauchst begrenzt?

Ich hätte 2 Lösungswege:

1. Du erzeugst ein reduziertes Farbspektrum, das für R, G und B jeweils nur z.B. 8 verschiedene Werte hat: 0, 31, 63, 95, 127, 159, 171, 203, 235, 255 (ein Wert fällt wegen der Hintergrundfarbe weg). Damit hättest du 8^3=512 Farben zur Verfügung. Wenn du eine neue Farbe erzeugst, brauchst du nur eine Zufallszahl von 0 bis (einschließlich) 7 zu erzeugen und multiplizierst diese mit dem Faktor 32, dies wiederholst du für jede Komponente (R, G, B). Dann prüfst du, ob genau diese Farbe bereits existiert. Wenn ja, wiederholst du den letzten Schritt, wenn nein hast du deine Farbe.

2. Wenn du eine Farbe erzeugst, prüfst du ob sie "weit genug von allen anderen Farben entfernt ist", d.h. du überprüfst für jede Komponente und jede Farbe einzeln, ob die Differenz der jeweiligen Farbwerte unterhalb eines Grenzwertes liegt, z.B. so:
Java:
public Color generateRandomColor(List<Color> allColors, int mindestAbstand)
			throws Exception {

		Color newColor = null;
		for (int i = 0; i < 10000; i++) {

			final Color possibleNewColor = new Color(
					(int) (Math.random() * 0x01000000));
			boolean found = false;
			for (final Color c : allColors) {
				if (Math.abs(c.getBlue() - possibleNewColor.getBlue()) < mindestAbstand
						|| Math.abs(c.getRed() - possibleNewColor.getRed()) < mindestAbstand
						|| Math.abs(c.getGreen() - possibleNewColor.getGreen()) < mindestAbstand) {
					found = false;
					break; // Farbe liegt zu nah an anderer Farbe!
				} else {
					found = true;
				}
			}
			if (found) {
				newColor = possibleNewColor;
				break;// fertig, verlasse äußere Schleife
			}
		}

		if (newColor == null) {
			throw new Exception(
					"Keine Farbe generiert, bitte kleinere Grenze wählen!");
		}
		return newColor;
	}
(ungetesteter Code)

Zur ersten Idee fällt mir auch gleich noch was ein, aber ich geh erst essen...
 
Das hatten wir schon.
Und seitdem warte ich darauf, dass ottens versteht, was Codetags sind.

@ottens: Falls einfach [code=java]...[/code] nicht verständlich ist findest du in meiner Sig einen Link zu einer ausführlichen Erklärung.
 

Neue Beiträge

Zurück