Abhängigkeiten (key-value )

Status
Nicht offen für weitere Antworten.

HoroSh

Mitglied
Wer kann mir helfen? ich brauche ein Algorithmus, das mir eine Value immer abhängig von key liefert. Ich meine das wenn ich z.Bsp. key = Math.random()(zBsp = 5) erzeuge, kann ich immer eine bestimmte value zuruckbekommen, egal wieviel mal meine program ausgeführt wird.
 
in meinem Fall brauche ich farben:
Color color = new Color(rot, gruen, blau);
----------
TreeMap colorTMap = new TreeMap();
colorTMap.put(integerRandom(), color());
wenn random mir eine 5 liefert muss eine bestimmte Farbe eindeutig sein(zBsp schwarz),
wenn random eine 7 liefert -> immer blau usw
 
Es geht nicht darum welche keys ich nehme, sondern darum, dass ich entsprechende values eindeutig geliefert bekomme
 
in meinem Fall brauche ich farben:
Color color = new Color(rot, gruen, blau);
----------
TreeMap colorTMap = new TreeMap();
colorTMap.put(integerRandom(), color());
wenn random mir eine 5 liefert muss eine bestimmte Farbe eindeutig sein(zBsp schwarz),
wenn random eine 7 liefert -> immer blau usw
was ist jetzt das Problem ?

in einer Map kannst du speichern dass bei 5 immer schwarz zurueckgeben wird und bei 7 Blau.

dass aber 5 == schwarz und 7 == blau musst du natuerlich dann schon selbst bestimmen.

Du kannst natuerlich auch integerRandom() und color() nutzen, nur dann musst du sicherstellen, dass bei untersch. integerRandoms() auch untersch. color() vorkommen etc.
 
Es geht nicht darum welche keys ich nehme, sondern darum, dass ich entsprechende values eindeutig geliefert bekomme

Ich kann zBsp color(123, 233, 124) mit einem wert(key) multiplizieren, dann werden meine Colors immer eindeutig von key abhängen. Aber dann wird meine Farbe um so heller, wenn id grösser ist-> muss aber nicht unbedingt sein.
 
Wenn du alle Werte zulassen willst, kannst du dir doch einfach 3 Zufallszahlen von 0 bis 255 generieren und diese an den Color-Konstruktor übergeben?
 
Ich kann zBsp color(123, 233, 124) mit einem wert(key) multiplizieren, dann werden meine Colors immer eindeutig von key abhängen. Aber dann wird meine Farbe um so heller, wenn id grösser ist-> muss aber nicht unbedingt sein.

du könntest sowas machen:

Java:
class ColorTest {

	private final int ANZAHL = 255;

	void test() {
		Random random = new Random(ANZAHL);

		ColorMap cm = new ColorMap();
		for (int i = 0; i < 255; i++) {
			if (cm.containsKey(i)) {
				Color color = cm.get(i);
			}
		}
	}

	class ColorMap extends TreeMap<Integer, Color> {

		public ColorMap() {
			Random random = new Random(ANZAHL);
			for (int i = 0; i < 255; i++) {
				put(i, new Color(random.nextInt(), random.nextInt(), random.nextInt()));
			}
		}
	}
}
 
TreeMap colorTMap = new TreeMap();
colorTMap.put(key, farbe);
key = irgend eine Zahl (zBsp = 5)
farbe = eine bestimmte Farbe, die immer bei key = 5 geliefert wird (zBsp schwarz)
zahl 87 liefert zBsp immer blau, zahl 56 liefert zBsp immer rot usw.
 
Zwei Möglichkeiten:
1. Definierte Farben: Da würde aber auch eine List<Color> genügen. Einfach n Einträge hinzufügen und dann mit 0 bis (n-1) darauf zugreifen.
2. Alle oder ein Subset von allen Farben: Jeweils new Color(rnd[0-255], rnd[0-255], rnd[0-255]) einfach irgendeine Farbe erstellen. Subset könnte so gehen: new Color(rnd[0-255/teil]*teil, rnd[0-255/teil]*teil, rnd[0-255/teil]*teil)
 
sowas??
Java:
Map<Integer, Color> map = new TreeMap<Integer, Color>();
map.put(0, Color.WHITE);
map.put(2, Color.BLUE);
map.put(3, Color.RED);
map.put(4, Color.RED);

for (int i=0; i<map.size(); i++)
	System.out.println(map.get(i));
 
also willst du doch so was:
Java:
public static Color getRandomColor(int overleap) {
    int values = (256 / (++overleap)) - 1;
    Random rand = new Random();
    int red = rand.nextInt(values) * overleap;
    int green = rand.nextInt(values) * overleap;
    int blue = rand.nextInt(values) * overleap;
    return new Color(red, green, blue);
}
der Aufruf [c]getRandomColor(0)[/c] liefert alle möglichen Kombinationen zurück (also 256^3; z.B. "175,203,48"), der Aufruf [c]getRandomColor(4)[/c] nur jede 5^3te Möglichkeit, also z.B. "205,170,35".
 
also willst du doch so was:
Java:
public static Color getRandomColor(int overleap) {
    int values = (256 / (++overleap)) - 1;
    Random rand = new Random();
    int red = rand.nextInt(values) * overleap;
    int green = rand.nextInt(values) * overleap;
    int blue = rand.nextInt(values) * overleap;
    return new Color(red, green, blue);
}
der Aufruf [c]getRandomColor(0)[/c] liefert alle möglichen Kombinationen zurück (also 256^3; z.B. "175,203,48"), der Aufruf [c]getRandomColor(4)[/c] nur jede 5^3te Möglichkeit, also z.B. "205,170,35".
...bej getRandomColor(5); soll aber immer das gleiche color rauskommen(schwarz)
...bej getRandomColor(3); soll aber immer das gleiche, aber andere color rauskommen(rot)
...bej getRandomColor(65); soll auch immer das gleiche, aber ein dritte color rauskommen(grau)
 
Ich verstehe dich einfach nicht... (und du verstehst wohl das englische wort overleap und meinen Code nicht) - aber wenn du mit einer Value einen Color haben willst, machs so:
Java:
public static Color getColor(int key) {
    int red = key % 255;
    key /= red;
    int green = key % 255;
    int blue = key / green;
    return new Color(red, green, blue);
}
So ist schwarz 0 und weiss 16581375
 
Ich verstehe dich einfach nicht... (und du verstehst wohl das englische wort overleap und meinen Code nicht) - aber wenn du mit einer Value einen Color haben willst, machs so:
Java:
public static Color getColor(int key) {
    int red = key % 255;
    key /= red;
    int green = key % 255;
    int blue = key / green;
    return new Color(red, green, blue);
}
So ist schwarz 0 und weiss 16581375

danke dir, ich glaube, dass das bis jetzt die beste lösung , bin auch selber dadrauf gekommen.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben