Thread Denkfehler in while? (29 answers)
Opened by Ichhalt at 2016-11-21 08:18

hlubenow
 2016-11-22 22:57
#185637 #185637
User since
2009-02-22
875 articles
BenutzerIn
[default_avatar]
2016-11-21T07:18:05 Ichhalt
Ich hab n Array @spieler in welchem sich gesichert 24 Elemente befinden.

ich muss nun testen, ob eine Paarung der der Spieler schon stattfand und wenn ja, mir den nächsten Spieler als Gegner holen und wieder erst überprüfen, ob diese Paarung schon gespielt hat.

Durchaus möglich. Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/perl

use warnings;
use strict;

my @alle_spieler = (1 .. 4);
# my @alle_spieler = (1 .. 24);
my %schon_gespielt;
my $spieler;
my $gegner;
my $i;
my $index;
my $laufende_nr = 1;

foreach $spieler (@alle_spieler) {
    # Im Hash %schon_gespielt wird fuer jeden Spieler
    # ein leeres, anonymes Array angelegt:
    $schon_gespielt{$spieler} = [];
}

print "\n";

foreach $spieler (@alle_spieler) {
    foreach $gegner (@alle_spieler) {
        if ($gegner == $spieler) {
            next;
        }
        $index = 0;
        # Das Array des Gegners (das sich im Hash %schon_gespielt befindet)
        # wird darauf untersucht, ob der Gegner schon gegen den
        # Spieler gespielt hat:
        foreach $i (@{$schon_gespielt{$gegner}}) {
            if ($i == $spieler) {
                $index = 1;
                last;
            }
        }
        if ($index == 1) {
            next;
        }
    print "$laufende_nr: Spieler Nr. $spieler gegen Spieler Nr. $gegner.\n";
    # Der Gegner des Spielers wird in dem Array des Spielers
    # (das sich im Hash %schon_gespielt befindet) abgelegt:
    push($schon_gespielt{$spieler}, $gegner);
    $laufende_nr++;
    }
}
print "\n";

Frage ist, ob Du das mit den Arrays in einem Hash schon kennst.

Der Code wird übrigens auch bei 24 Spielern nicht langsam.
Last edited: 2016-11-22 22:59:25 +0100 (CET)

View full thread Denkfehler in while?