Thread Probleme mit splice. Warum geht dat net??? (11 answers)
Opened by Alvin at 2008-01-12 17:22

Alvin
 2008-01-12 17:22
#104642 #104642
User since
2007-12-28
9 Artikel
BenutzerIn
[default_avatar]
Hi,

ich hab mal wieder ne Frage. Ich habe folgendes programmiert (teilweise dank eurer Hilfe!):

#USAGE: ./alvin.pl 6 3

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
#!/usr/bin/perl
use strict;
use warnings;

my $init_popsize=$ARGV[0]-1;
my $maxtime=$ARGV[1];

my @age;
my @gender;
my @weight;
my @population = (0..$init_popsize);

for my $i(0..$#population){
    $age[$i]=int(rand(10));                  #Alter
    my $r1=rand();
    if($r1<=0.4){                                 #Geschlecht (0=männlich, 1=weiblich)
        $gender[$i]=0;
        }
    else{
        $gender[$i]=1;
        }
    my $r2=rand();
    if ($r2<=0.3){                                #Gewicht
        $weight[$i]=0;
        }
    elsif ($r2>0.3 && $r2<=0.6){
        $weight[$i]=1;
        }
    else{
        $weight[$i]=2;
        }
    printf "$age[$i] $gender[$i] $weight[$i]\n";
    } 
printf "\n";



Aussen:
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
for my $t (1..$maxtime){
     
    Innen: for my $i (0..$#population){

        $age[$i]++;
        
        if ($age[$i]>=10){
            splice (@age, $i, 1);
            splice (@weight, $i, 1);
            splice (@gender, $i, 1);
            splice (@population, $i, 1);
            # $age[$i]++;
            next Innen;
       }
   }

for my $i (0..$#population){

printf "$age[$i] $gender[$i] $weight[$i]\n";
}
my $population=$#population+1;
printf "\npopulation:  $population\n";
}



So...nun mein Problem: als Ausgabe erhalte ich unter anderem für das Alter age[i] z.B.:

4
5
7
9
1
7

soweit so gut, aber wenn jetzt, wie gewünscht, die 9 durch splice rausfliegt und alle um age++ um eins erhöht werden kommt folgendes

5
6
8
1
8

die 9 ist weg, wie gewünscht, die 4,5,7 und die letzte 7 wurden um 1 erhöht, aber die 1 wurde nicht erhöht. Warum???
Hab schon dran gedacht nach den splice Befehlen i-- zu machen, aber bringt auch nix. Aber wenn ich nach den splice Befehlen das oben auskommentierte age++ benutze geht es, aber ich kapier nicht warum er das nicht ohne dieses macht???

Danke schon mal für die Hilfe!!!

P.S. Hoffe mein Problem ist verständlich geworden???

edit pq: perl-tags hinzugefügt

View full thread Probleme mit splice. Warum geht dat net???