aufzurufenden arraynamen ändern

Belinus

Grünschnabel
Ich habe 4 Arrays (int Spieler1Var, ...) und ich muss nacheinander alle arrays in einer if Bedingung überprüfen. Ist es möglich das ich zum
Beispiel in einer for schleife eine if schleife habe und in dieser dann vier Arrays nacheinander vergleichen kann? Unten mein Jetziger Code:

C++:
TesterP1 = true;                                   
TesterP2 = true;
TesterP3 = true;
TesterP4 = true;
 
for (int y = 0; y <= 7; y++)
 {
     if (PflichtenBen[y][x] == 1)
     {
         if (SpielerVar1[y] != 1)
         {
             TesterP1 = false;
         }
     }
    
     if (PflichtenBen[y][x] == 2)
     {
         if (SpielerVar1[y] != 2)
         {
             TesterP1 = false;
         }
     }
 }

 for (int y = 8; y <= 15; y++)   Ab hier wird es interessant
 {
     if (PflichtenBen[y][x] == 1)
     {
         if (SpielerVar2[y] != 1)
         {
             TesterP2 = false;
         }
     }

     if (PflichtenBen[y][x] == 2)
     {
         if (SpielerVar2[y] != 2)
         {
             TesterP2 = false;
         }
     }

     if (PflichtenBen[y][x] == 1)
     {
         if (SpielerVar3[y] != 1)
         {
             TesterP3 = false;
         }
     }

     if (PflichtenBen[y][x] == 2)
     {
         if (SpielerVar3[y] != 2)
         {
             TesterP3 = false;
         }
     }

     if (PflichtenBen[y][x] == 1)
     {
         if (SpielerVar4[y] != 1)
         {
             TesterP4 = false;
         }
     }

     if (PflichtenBen[y][x] == 2)
     {
         if (SpielerVar4[y] != 2)
         {
             TesterP4 = false;
         }
     }

Vielen Dank für eure Zeit
 
Zuletzt bearbeitet von einem Moderator:
Lösung
Nein, Du brauchst keinen String, nur einfach den Variablennamen notieren:
Code:
int checkit(int[] spielerVar) {
    /* hier steht jetzt das aktuelle Spielerarray unter spielerVar zur Verfuegung */
  
    /* das Ergebnis der Pruefungen als Rueckgabewert uebergeben */
    return xyz;
}

/* Und dann der Aufruf: */
int result = checkit(SpielerVar2);
if (result) {
  
}

BTW: C(++) ist bei mir eine Weile her, kann gut sein, dass ich nicht alles auf Punkt und Komma getroffen habe.
habe es mal ein wenig sinniger/leserlicher formatiert für Dich:

C++:
for (int y = 0; y <= 7; y++)
{
    if (PflichtenBen[y][x] == 1)
    {
        if (SpielerVar1[y] != 1)
        {
            TesterP1 = false;
        }
    }

    if (PflichtenBen[y][x] == 2)
    {
        if (SpielerVar1[y] != 2)
        {
            TesterP1 = false;
        }
    }
}


for (int y = 8; y <= 15; y++) // Ab hier wird es interessant
{
    if (PflichtenBen[y][x] == 1)
    {
        if (SpielerVar2[y] != 1)
        {
            TesterP2 = false;
    }
}

if (PflichtenBen[y][x] == 2)
{
    if (SpielerVar2[y] != 2)
    {
        TesterP2 = false;
    }
}

if (PflichtenBen[y][x] == 1)
{
    if (SpielerVar3[y] != 1)
    {
        TesterP3 = false;
    }
}

if (PflichtenBen[y][x] == 2)
{
    if (SpielerVar3[y] != 2)
    {
        TesterP3 = false;
    }
}

if (PflichtenBen[y][x] == 1)
{
    if (SpielerVar4[y] != 1)
    {
        TesterP4 = false;
    }
}

if (PflichtenBen[y][x] == 2)
{
    if (SpielerVar4[y] != 2)
    {
        TesterP4 = false;
    }
}

Gesetzt den Fall, dass Du alle Arrays sauber deklariert (und gefüllt) hast sieht es auf den ersten Blick mal nicht schlecht aus (aus wenn man das natürlich deutlichen schöner/eleganter programmieren könnte) !!
Die Logik ist so natürlich kaum zu erkennen.
Und Deine Eingangsfrage klärt es auch nicht wirklich ..... :rolleyes::rolleyes:

VG Klaus
 
Hi,
Sorry das man es nicht so versteht. Es geht darum, das ich in einer if Abfrage eine Deklarierte und ausgefüllte Array mit einem Wert vergleiche, und das halt mit vier arrays. Mein Code der oben ist erfüllt zwar seinen Zweck, ist aber dafür das außer das sich ein array-namen ändert 3x das gleiche. Meine Frage war halt ob man das auch deutlich kleiner hinbekommt.
LG
Linus
 
Da gibt es sicherlich mehrere Möglichkeiten, das kürzer/effektiver zu schreiben ...

Das einzige was sich ändert, ist 'SpielerVar1 - 4'!
Das wir aber nicht wissen, was dein Code überhaupt machen soll, wird auch keiner auf eine andere oder besser Lösung kommen !
VG Klaus
 
Also,
Jeder Spieler hat eine Array[8] (SpielerVar1-4), und in jedem Slot wird ein Zustand einer Bedingung beschrieben(0=nicht vorhanden, 1= vorhanden aber nicht besetzt und 2 für vorhanden aber besetzt). Dann habe ich eine Array[16][...](PflichtenBen), in der steht welcher zustand jede einzelnen Bedingung haben muss. Dabei steht eine null dafür, das es egal ist ob der Spielerstand bei dem Slot 0,1 oder 2 sein kann, eine 1 steht dafür das es eine 1 bei dem Spieler-Slot sein muss und eine 2 dafür, das es eine 2 bei dem Spieler-Slot sein muss. Die ersten 8 Slots der PflichtenBen werden dabei mit der SpielerVar1 überprüft, und die anderen 8 Slots der PflichtenBen mit SpielerVar 2-4 überprüft. Die SpielerVar1 muss mit den ersten 8 Slots der PflichtenBen übereinstimmen, bei SpielerVar 2-4 reicht es wenn einer der SpielerVar 2-4 die Bedingungen erfüllt. Die PflichtenBen ist 2D, da es in jeder Zeile unterschiedliche Pflichten(Ich will ein Wahrheit oder Pflicht in kompliziert programmieren)mit unterschiedlichen Bedingungen gibt.
Wenn der Code funktioniert, weiß ich also ob der Spieler1 die Bedingungen der Pflicht erfüllt und ob ein benötigter 2. Spieler die Bedingungen erfüllt. Das mach ich dann mit allen Pflichten die vorhanden sind und weiß, welche ich in den "Zufallstopf" werfen kann. Da sich die zustände der Spieler dauernd ändern, muss es leider automatisch gemacht werden.
Selbst wenn es dafür keine Lösung gibt oder man es nicht versteht, Vielen Dank für eure Zeit.
LG
Linus
 
hmm :rolleyes::rolleyes:

Nicht, dass ich jetzt mehr verstehe ....

Und was ist jetzt genau die Frage rsp. dein Problem?
Was funktioniert nicht??
 
Naja, funktionieren tut es,
es ist halt ziemlich lang. Ich wollte wissen ob man das kürzer machen kann.
LG
 
Eine Funktion schreiben und das Array des Spielers, SpielerVar2-4 als Parameter übergeben? Spieler 1 kann man wahrscheinlich nicht damit abdecken, weil dort die Prüfungen anders sind, wenn ich dich richtig verstanden habe.
 
Zurück