PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 1 Wert in 2 versch. Arrays



juan_
07.01.2009, 18:15
Hallo beisammen,

kann mir jemand sagen, wie ich mit möglichst wenig Aufwand eine Zahl in ein 2dim. Array (bestimmte Position) packe und ein boolsches Array an der Stelle[Zahl] auf true setze?

;)

Bsp:
Zahl 4 soll an Stelle [2][1] des Arrays und das Booleanarray soll an Position 4 auf true gesetzt werden.


Steh grad irgendwie ein bisschen aufm Schlauch :S

danke && ciao

Dizzy
07.01.2009, 18:27
öhm ...


zahl = 4;
foo[2][1] = zahl;
bar[zahl] = true

... oder stehe ich auch auf einem Schlauch?

juan_
07.01.2009, 18:31
jain, theoretisch hast du recht. ich hätte mich vielleicht ein wenig präziser ausdrücken sollen:

das Ganz wird in versch. Methoden weiterverarbeiten, und daher geht so deine "zentrale" Lösung nicht. Ich würde gerne am Anfang irgendwas definieren und es dann via Methode an die anderen Beiden weiterleiten. Ich will außerdem flexibel bleiben, an welchen Stellen die Zahl im 2dim. Array eingetragen wird.

ciao

Dizzy
07.01.2009, 18:34
Hm, ich kenne die Architektur deines Programmes nicht, aber lässt es sich eventuell mit einer statischen Klasse (soll als Ableger dienen) oder einer Member-Variable (aus der ganzen Klasse erreichbar) lösen?

juan_
07.01.2009, 18:42
keine Ahnung, haha ;)

Sorry, sagt mir absolut null, bin noch sehr weit am Anfang. Programm darf ich leider auch nicht posten, weil es ne Belegarbeit ist und ich nicht will, dass ich wegen sonem "Fehler" druchfalle.

vielleicht kann ich es ein bisschen erklären.

-math.random zieht eine zahl von 1-16
-methode überprüft ob die Zahl schon in matrix[][] steht, wenn nein: zahl reinschreiben und booleanarray bei zahl auf true sezten.


eigentlich ganz simpel. jetzt würde ich es gerne so einrichten, dass ich das Programm mit ein paar Initialwerten füttere, und ihm damit sagen, dass matrix[2][1] mit 4 bereits belegt ist und die 4 Pos. im Booleanarray auf true steht. diese zahl darf somit nicht wieder gezogen werden

Dizzy
07.01.2009, 18:50
//foo[x][y]
//bar[x*y]
int newRandom = Math.Random(16);

for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
if(foo[x][y] == newRandom) bar[x*y] = true;
}
}

juan_
07.01.2009, 18:53
verdammt!

wieder unglücklich ausgedrückt. Alles steht, bis auf die Initialwerteintragung ;)


//edit: okay, lassen wirs. ist einfach zu dumm, ohne mit dem Programm zu arbeiten...

Danke dir für deine Mühen

Dizzy
07.01.2009, 18:59
Also, ich hab Zeit. Eventuell ist es auch meine Schuld.

Also, das was ich die gegeben habe passt, aber es fehlt eine "Initialwerteintragung"? - Meinst du damit, dass du dieses foo[x][y] mit Werten füllst, und bei jeder Eintragung wird der jeweilige Wert quasi durchgestrichen, sodass der Wert immer nur 1 mal vorkommt?

juan_
07.01.2009, 19:07
Ich glaube, dass wir beide ein wenig an einander vorbei arbeiten ;)

Das was du mir gegeben hast passt nicht, da ich das ganze Prozedere mit den Randomwerten in eigene Funktionen ausgelagert habe.

im Prinzip muss die Methode so aussehen, dass ich ihr einfach sagen, dass welche Initialwerte ich brauche. im Prinzip evtl. sowas:
initialisiere(array[2][1] = 4)
initialisiere(array[3][2] = 6)

die Initialisierenmethode sieht dann so aus, dass sie erstmal die beiden Werte (4,6) an die jeweiligen Positionen schreibt UND die Positionen 4 und 6 im boolschen Array auf true stellt.


Mit fällt aber dabei gerade das nächste Problem auf: wie kann ich den beiden Positionen im Array (2,1 und 3,2) sperren, sodass die Felder nicht bearbeitet werden können?!

Dizzy
07.01.2009, 19:56
Hi,

zwecks des "neuen Problems": prüfe, ob das Array an dieser Position bereits einen Wert enthält.

Wenn ich dich jetzt richtig verstanden habe:


private static int[,] foo = new int[4, 4];
private static bool[] bar = new bool[16];

static private bool initialisiere(int x, int y)
{
int newRand = new Random().Next(16);
if (foo[x, y] != -1 || bar[newRand])
{
// Array besitzt an dieser Position einen Wert
// oder
// Randomzahl wurde bereits genutzt

return false;
}
else
{
foo[x, y] = newRand;
bar[newRand] = true;

return true;
}
}

static private void erstmaligesFuellen()
{
// alles auf -1 setzen um zu zeigen, dass es leer ist
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
foo[i, j] = -1;
}
}

bool warNix = false;
for (int x = 0; x < 4; x++)
{
for (int y = 0; y < 4; y++)
{
while (warNix == false)
{
warNix = initialisiere(x, y);
}
warNix = false;
}
}
}

juan_
07.01.2009, 20:04
danke!