S
Seelenschnitter
Gast
Hallo zusammen, ich habe ein kleines Problemchen:
Ich muss eine Klasse Farbe realisieren, das erst aus einer Farbtupel eine rrrgggbbb (z.B. 255255255) Zahl macht.
Eine Methode soll invertieren (hab ich fertig)
eine soll 2 Farben addieren (aber nicht über 255 kommen, habe ich auch fertig)
und eine Methode die zu einer Farbe eine „beliebige“ andere Farbe liefert.(daran renne ich mich gerade tot und komme nicht weiter)
Der Sinn dieser Methode ist, durch wiederholte Anwendung alle RGB-Farben zu generieren.
Betrachten Sie dazu folgenden Java-Code (c enthalte irgendeine Farbe im Format rrrgggbbb,
n sei die Anzahl der möglichen Farben):
d=gibNaechsteFarbe(c) // 1. Aufruf
d=gibNaechsteFarbe(d) // 2. Aufruf
d=gibNaechsteFarbe(d) // 3. Aufruf
...
d=gibNaechsteFarbe(d) // n-ter Aufruf
Alle Farben, die beim 1. bis zum vorletzten Aufruf erzeugt werden, sollen untereinander und
von der Anfangsfarbe c verschieden sein. Die Farbe, die beim letzten Aufruf erzeugt wird, soll
mit der Anfangsfarbe gleich sein, d. h. c und d sind nach Ausführung des Codes gleich
Das Programm mit Schiebereglern etc haben wir vorgegeben bekommen aber ich weiss einfach nicht, was ich falsch mache.
Ich bedanke mich schonmal im vorraus, mir rennt nur leider die Zeit davon
Ich muss eine Klasse Farbe realisieren, das erst aus einer Farbtupel eine rrrgggbbb (z.B. 255255255) Zahl macht.
Eine Methode soll invertieren (hab ich fertig)
eine soll 2 Farben addieren (aber nicht über 255 kommen, habe ich auch fertig)
und eine Methode die zu einer Farbe eine „beliebige“ andere Farbe liefert.(daran renne ich mich gerade tot und komme nicht weiter)
Der Sinn dieser Methode ist, durch wiederholte Anwendung alle RGB-Farben zu generieren.
Betrachten Sie dazu folgenden Java-Code (c enthalte irgendeine Farbe im Format rrrgggbbb,
n sei die Anzahl der möglichen Farben):
d=gibNaechsteFarbe(c) // 1. Aufruf
d=gibNaechsteFarbe(d) // 2. Aufruf
d=gibNaechsteFarbe(d) // 3. Aufruf
...
d=gibNaechsteFarbe(d) // n-ter Aufruf
Alle Farben, die beim 1. bis zum vorletzten Aufruf erzeugt werden, sollen untereinander und
von der Anfangsfarbe c verschieden sein. Die Farbe, die beim letzten Aufruf erzeugt wird, soll
mit der Anfangsfarbe gleich sein, d. h. c und d sind nach Ausführung des Codes gleich
Das Programm mit Schiebereglern etc haben wir vorgegeben bekommen aber ich weiss einfach nicht, was ich falsch mache.
Java:
/**
* Diese Klasse berechnet RGB Farben.
*/
public class Farbe {
/**
* RGB Farben im Format rrrgggbbb werden addiert,invertiert und die
* fortlaufende Farbe wird ausgegeben.Dies l�sst sich dann mit
* der Farbdarstellung GUI darstellen.
*
* @param args wird nicht verwendet
*/
public static void main(String args[]) {
/*
* Wertuebergabe an die Methoden gibNaechsteFarbe,
* addiere und invertieren.
*/
System.out.println(gibNaechsteFarbe(255200200));
System.out.println(addiere(250250250 , 100100100));
System.out.println(invertiere(10128255));
}
/*
* Die Methode berechneRot berechnet den Rot-Anteil aus einer
* Farbzahl im Format rrrgggbbb, indem die Variable "farbe" durch
* 1000000 dividiert wird.Der ausgegebene Wert wird an die Variable
* "rot" uebergeben. Der Wert fuer "farbe" wird von den
* spaeteren Methoden "invertiere und addiere" uebergeben.
* Die Nachkommastelle wird dadurch entfernt,
* dass die Zahl ein "int" Wert ist.
*/
public static int berechneRot(int farbe) {
int rot = (farbe / 1000000);
return rot;
}
/*
* Die Methode fuer den gruenen Farbanteil des rrrgggbbb Wertes.
* Hier wird nochmals der rot Anteil erechnet.Der Wert gruen
* wird errechnet, indem die Farbe Rot mit 1000000 multipliziert
* wird und von der Variablen "farbe" subtrahiert wird. Der naechste Schritt
* ist die Dividierung durch 1000 ,um den Gruenanteil zu erhalten.
* Die Nachkommastelle wird auf dieselbe Weise entnfert, wie bei
* der Errechnung des Farbanteils "rot".
*/
public static int berechneGruen(int farbe) {
int rot = (farbe / 1000000);
int gruen = ((farbe - rot * 1000000) / 1000);
return gruen;
}
/*
* Methode fuer den blauen Farbanteil. Rot und Gruen werden erneut
* errechnet, dann erfolgt die Errechnung fuer den blauen Farbanteil.
* Rot wird mit 1000000 multipliziert und dann von der Variablen "farbe"
* subtrahiert.Dann folgt die multiplikation mit 1000
* mit dem Farbanteil gruen. Dieser Wert wird nochmals von der Variablen
* "farbe" subtrahiert. Was bleibt, ist der blaue Farbanteil.
*/
public static int berechneBlau(int farbe) {
int rot = (farbe / 1000000);
int gruen = ((farbe - rot * 1000000) / 1000);
int blau = ((farbe - rot * 1000000) - gruen * 1000);
return blau;
}
/*
* Methode um eine Zahl zu invertieren. Zuerst holst sich die Methode
* ihren Wert �ber die Variablendeklaration "int farbe" von oben aus
* "System.out.println(invertiere(10128255))". Um eine Invertierung zu
* erreichen, wird der maximale Farbanteilswert "255" subtrahiert mit
* dem rot Anteil. Als letzter Schritt werden die einzelnen Werte
* die in Rot,Gruen und Blauf aufgeteilt sind zu einem rrrgggbbb Wert
* zusammen gesetzt. Das errechnete Rot wird mit 1000000 multipliziert,
* dann wird das Gruen mit 1000 multipliziert und zum rot Wert addiert
* und zuletzt wird noch der blau Anteil hinzu addiert.
*/
public static int invertiere(int farbe) {
int rot = 255 - berechneRot(farbe);
int gruen = 255 - berechneGruen(farbe);
int blau = 255 - berechneBlau(farbe);
int farbeZahl = (((rot * 1000000) + gruen * 1000) + blau);
return farbeZahl;
}
/*
* Methode fuer den blauen Farbanteil. Rot und Gruen werden erneut
* errechnet, dann erfolgt die Errechnung fuer den blauen Farbanteil.
* Rot wird mit 1000000 multipliziert und dann von der Variablen "farbe"
* subtrahiert.Dann folgt die multiplikation mit 1000
* mit dem Farbanteil gruen. Dieser Wert wird nochmals von der Variablen
* "farbe" subtrahiert. Was bleibt, ist der blaue Farbanteil.
*/
public static int addiere(int farbe1 , int farbe2) {
int rot = ((berechneRot(farbe1) + berechneRot(farbe2)) > 255)
? (rot = 0)
: (berechneRot(farbe1)) + (berechneRot(farbe2));
int gruen = ((berechneGruen(farbe1) + berechneGruen(farbe2)) > 255)
? (gruen = 0)
: (berechneGruen(farbe1)) + (berechneGruen(farbe2));
int blau = ((berechneBlau(farbe1) + berechneBlau(farbe2)) > 255)
? (rot = 0)
: (berechneBlau(farbe1)) + (berechneBlau(farbe2));
int farbeZahl = (((rot * 1000000) + gruen * 1000) + blau);
return farbeZahl;
}
/*
* Methode fuer den blauen Farbanteil. Rot und Gruen werden erneut
* errechnet, dann erfolgt die Errechnung fuer den blauen Farbanteil.
* Rot wird mit 1000000 multipliziert und dann von der Variablen "farbe"
* subtrahiert.Dann folgt die multiplikation mit 1000
* mit dem Farbanteil gruen. Dieser Wert wird nochmals von der Variablen
* "farbe" subtrahiert. Was bleibt, ist der blaue Farbanteil.
*/
public static int gibNaechsteFarbe(int farbe) {
int rot = (berechneRot(farbe));
int gruen = (berechneGruen(farbe));
int blau = (berechneBlau(farbe));
blau = (blau > 255) ? (blau + 1) : (blau);
gruen = (blau == 255) & (blau == 255) ? (gruen + 1) : (gruen);
rot = (blau == 255) & (gruen == 255) ? (rot + 1) : (rot);
rot = (blau == 255) & (gruen == 255) & (rot == 255) ? (rot = 0) : (rot);
int wert = (((rot * 1000000) + gruen * 1000) + blau);
return wert;
}
}
Ich bedanke mich schonmal im vorraus, mir rennt nur leider die Zeit davon