Geschrieben von Grisu am 04.12.2013 um 22:58:
array die zweite
Hi @ all,
ich möchte eine rekursive Folge wiedergeben.
Und zwar, ich lese einen array
![[latex]b=(b_0, ... ,b_{n-1})[/latex]](http://www.matheboard.de/latex2png/latex2png.php?b=(b_0, ... ,b_{n-1}))
mit
Nun ist der Startwert meiner Folge
![[latex]a_0=b_0[/latex]](http://www.matheboard.de/latex2png/latex2png.php?a_0=b_0)
.
Jeder weiter Wert wird rekursiv ermittelt durch
![[latex]a_i=a_{i-1}[/latex]](http://www.matheboard.de/latex2png/latex2png.php?a_i=a_{i-1})
falls
![[latex]b_i=0[/latex]](http://www.matheboard.de/latex2png/latex2png.php?b_i=0)
und
![[latex]a_i \neq a_{i-1}[/latex]](http://www.matheboard.de/latex2png/latex2png.php?a_i \neq a_{i-1})
, also
![[latex]a_i=(a_{i-1}+1)\mod 2[/latex]](http://www.matheboard.de/latex2png/latex2png.php?a_i=(a_{i-1}+1)\mod 2)
, falls
Die Veränderung soll in dem vorhandenen array gespeichert werden.
Ich habe das ganze folgendermaßen umgesetzt:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
public static void abl(int[] b){
int a=0;
for(int i=0;i<b.length;i++){
if(i==0){
a=b[i];
}
if((i>0)&&(b[i]==0)){
a=a;
}
if((i>0)&&(b[i]==1)){
a=(a+1)%2;
}
b[i]=a;
}
for(int j=0;j<b.length;j++){
System.out.print(b[j]+" ");
}
} |
|
Jetzt nehme ich den Vektor 1,1,0,1,0,0,1,1 entgegen, nach Ablauf sollte es doch sein:
i=0, b_i=1, a=1
i=1, b_i=1, a=0
i=2, b_i=0, a=0
i=3, b_i=1, a=1
i=4, b_i=0, a=1
i=5, b_i=0, a=1
i=6, b_i=1, a=0
i=7, b_i=1, a=1
Da ich am Ende jeder Schleife b[i] mit dem jeweiligen Wert für a überschreibe, sollte der neue Vektor dann doch eigentlich b=(1,0,0,1,1,1,0,1) sein, Ausführen des Programms liefert mir aber 1,1,0,1,0,0,1,1
Nun sehe ich den Fehler nicht.
Eigentlich soll das ganze auch noch ne Rekursion werden...
Schönen Dank schon mal..
Geschrieben von eulerscheZahl am 05.12.2013 um 07:08:
Hast du dein Programm wieder abgetippt und dabei einen Fehler korrigert?
Bei mir funktioniert es, ich habe es dann noch etwas gekürzt
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
public static void abl(int[] b){
int a = b[0];
for(int i = 1; i < b.length; i++){
if(b[i] == 1)
a = (a + 1) % 2;
b[i] = a;
}
}
public static void main(String[] args) {
int[] b = {1, 1, 0, 1, 0, 0, 1, 1};
System.out.print("b davor: ");
for(int j = 0; j < b.length; j++)
System.out.print(b[j] + " ");
abl(b);
System.out.print("\nb danach: ");
for(int j = 0; j < b.length; j++)
System.out.print(b[j] + " ");
}
/*
b davor: 1 1 0 1 0 0 1 1
b danach: 1 0 0 1 1 1 0 1
*/ |
|