# Java Farben Aufgabe



## shygo (13. Nov 2014)

Hallo Leute,

habe bei meinen Hausaufgaben 2 Probleme, aber vorher beschreibe ich mla die Aufgabenstellung:

Es geht um statische Methoden.
Ich habe die RGB-Werte für Farben die von 0 - 255 gehen.
Um alle Farben mischen zu können braucht man also rot,grün und blau.
Also hätten wir das Format 255,255,255, da wir aber nur elementare Datentyoen kennengelernt haben müssen wir es als ganze Zahl im Format rrrgggbbb repräsentieren und führende Nullen müssen weggelassen werden.

Beispiele:
255000000 = (255,0,0)
205030007 = (205,30,7)
        20080 = (0,20,80)
                0 = (0,0,0)

Dann soll ich eine Methoden schreiben um die Farben zu invertieren. Beispiele:

          (0,0,0) = (255,255,255)
(10,128,255) = (245,127,0)

Damit habe ich keine Probleme.
Bei der nächsten Aufgabe soll man die nächste Farbe zu einer Farbe bestimmen also +1 draufrechnen.
Beispiele:
(10,11,12)     = (10,11,13)
(10,128,255) = (10,129,0)


Mein Problem ist das ich es nicht hinkriegen die führenden Nullen weg und bei einem Ergebnis zeigt er mir was falsches an und ich finden nicht den Fehler. Hier mal meine Fälle die eintreffen müssen:

Farbe (0,0,0) invertieren zu (255,255,255)
Farbe (10,128,255) invertieren zu (10,128,255) = (245,127,0)
nächste Farbe zu (10,11,12)   berechnen  = (10,11,13)
nächste Farbe zu (10,128,255)   berechnen  = (10,129,0)
nächste Farbe zu (0,255,255)   berechnen  = (1,0,0) (Hier kriege ich das falsche Ergebnis)
nächste Farbe zu (255,255,255)   berechnen  = (0,0,0)   (Hier kriege ichnur 0 raus, muss aber 0,0,0 sein)
Ansonsten hier bisher meine Arbeit, wäre über jede Hilfe dankbar. Und mir ist gerade noch ein weiteres Problem aufgefallen, ich kann nicht 
	
	
	
	





```
System.out.println(gibNaechsteFarbe(10128255));
```
 zu 010128255 machen wie es seien sollte dann zeigt er mir an integer number too large.

```
public class Farben {

/**
 * Testet die Ausgabe der "invertiere" Metode.
 * @param args wird nicht verwendet
 */
 
    public static void main(String[] args) {
        System.out.println(invertiere(000000000));
        System.out.println(invertiere(10128255));
        System.out.println(gibNaechsteFarbe(10011012));
        System.out.println(gibNaechsteFarbe(10128255));
        System.out.println(gibNaechsteFarbe(000255255));
        System.out.println(gibNaechsteFarbe(255255255));
    }

    public static int invertiere(int rgbColor) {

        /* Maximalwert abziehen vom Istwert*/
        return 255255255 - rgbColor;
   
    }


    public static int gibNaechsteFarbe(int rgbColor){

        /* rrr.gggbbb = rrrgggbbb / 100000 */    
        int red = rgbColor / 1000000;
        
        
        /* rrrggg.bbb - rrr000 = ggg */
        int green = rgbColor / 1000 - red * 1000;
        
        /* rrrgggbbb - rrr000000 - ggg000 = bbb */
        int blue = rgbColor - red * 1000000 - green * 1000;
        
        
        
        /* Hier werden die Farben +1 hochgezählt für die nächste Farbe*/
        
        /* (bbb + 1) z.B. 120 wird zu 121 bbb*/
        int nextBlue = blue + 1;
        
        /* Wenn blue 255 erreicht hat wird green +1 gezählt*/
        int nextGreen = (nextBlue < 256) ? green : green + 1;
        
        /* Wenn grün 255 erreicht hat wird red +1 gezählt*/
        int nextRed = (nextGreen < 256) ? red : red + 1;
        
       
        

        
        
        /* Überlauf bei der 256 muss zu 0 gesetz werden*/
        
        nextGreen = (nextGreen < 256) ? nextGreen : 0;
        nextBlue  = (nextBlue < 256) ? nextBlue : 0;
        nextRed   = (nextRed < 256) ? nextRed : 0;
        
        
        /* Rechnet ale Farbenwerte zusammen auf 9 Stellen */
       return nextRed * 1000000 + nextGreen * 1000 + nextBlue;
}
	
}
```


----------



## VfL_Freak (13. Nov 2014)

Moin,

*Vorsicht!!*
Du darfst in Java keinen Integer-Wert mit führender '0' deklarieren !!!
Sowas wird als _Oktal-Zahl_ interpretiert 

Gruß
Klaus


----------



## shygo (13. Nov 2014)

Dank dir, gut zu wissen, deshalb funktioniert 

```
System.out.println(gibNaechsteFarbe(000255255));
```
 auch nicht bzw. gibt mir das falsche Ergebnis aus.


----------



## VfL_Freak (13. Nov 2014)

Moin,

richtig, ob eine oder mehrere führende Nullen sollte auch hierbei IMHO egal sein.

Und bei "010128255" stört er sich natürlich an der '8', da es keine gültige Oktalzahl ist!

Gruß
Klaus


----------



## shygo (13. Nov 2014)

Ja da passt das aber, also das richtige Ergebnis rechnet er ja damit aus also lasse ich diese Zeile erstmal so 

Hab nur das Problem mit den führenden Nullen bei der Ergebnisanzeige.
Habe die Nullen mal weggelassen, dann zeigt er mir auch das richtige Ergebnis an.

```
System.out.println(gibNaechsteFarbe(255255));
```
 wird zu 1000000 also (1,0,0)

Nur kann mir wer sagen wie ich diese Darstellung so hinkriegen soll ? z.B. bim letzten kriege ich ja 0 raus, sollte aber eig (0,0,0) sein.


----------



## JCODA (13. Nov 2014)

```
public class PrintColor {

	public static void main(String[] args) {
		System.out.println(formatIntToColorString(255001154));

	}

	private static String formatIntToColorString(int i) {		
		// rgb -> rrrgggbbb		
		int b = i % 1000;
		int g = (i/1_000)%1_000;
		int r = (i/1_000_000)%1_000_000;		
		return "("+r+","+g+","+b+")";
	}

}
```


----------



## shygo (14. Nov 2014)

JCODA hat gesagt.:


> ```
> public class PrintColor {
> 
> public static void main(String[] args) {
> ...



Danke für deine Mühe, aber Strings haben wir noch nicht = nicht verwendbar.

Vllt. noch jemande eine andere Idee ? Es geht nur noch um die führenden Nullen hautpsächlich und wie ich beimletzten Ergebnis;
(0,0,0) bekomme weil ich ja nur 0 rauskriege weil ich mit ganzen Zahlen rechne.


----------

