# RLE Codierung



## soap88 (2. Jan 2008)

Hallo,
ich komme bei der codierung einfach nicht weiter. Ich will die array elemente paarweise vergleichen, und dann das codierte ausgeben. 
das array hat diese elemente: {444449999} 
codiert sieht es dann so aus: {5449}

gruß
soap


----------



## The_S (3. Jan 2008)

Als Ansatz:


```
int[] ar = {4,4,4,4,4,9,9,9,9};
		StringBuffer buf = new StringBuffer();
		int count = 1;
		for (int i = 1; i < ar.length; i++) {
			if (ar[i] == ar[i-1]) {
				count++;
			}
			else {
				buf.append(count);
				buf.append(ar[i-1]);
				count = 1;
			}
		}
		buf.append(count);
		buf.append(ar[ar.length - 1]);
		System.out.println(buf.toString());
```

Da fehlt aber noch n bisschen der Feinschliff (darfst du dann machen). Z. B. was passiert, wenn 15 vierer hintereinander stehen? Oder wenn ein "ar" leer ist!?


----------



## AlArenal (3. Jan 2008)

bei 15 4ern ist es dann eben "9464"


----------



## The_S (3. Jan 2008)

du sollst net imma alles verraten


----------



## AlArenal (3. Jan 2008)

Iss ja wie in der Schule hier


----------



## soap88 (3. Jan 2008)

danke, ich habs soweit verstanden, ich versuche mal den robot so zu programmieren, dass er das macht.
den befehl append kenn ich nicht, was passiert da??


----------



## The_S (3. Jan 2008)

append fügt etwas an. Steht auch alles in der API ...


----------



## soap88 (3. Jan 2008)

danke, klappt wunderbar. 
noch ne frage: das oben genannte array hat 9 elemente. ich will, dass der index nicht von null sondern mit eins startet, wie bekomme ich das hin. 
hab es so gemacht, aber dann hat das array ja 10 elemente.


```
int [] data ={0,3, 3, 3, 3, 3, 6, 6, 6, 6}; {
             data[0]=0;
             data[1]=3;
             data[2]=3;
             data[3]=3;
             data[4]=3;
             data[5]=3;
             data[6]=6;
             data[7]=6;
             data[8]=6;
             data[9]=6;
             }
```
[/code]


gruß
soap


----------



## FenchelT (3. Jan 2008)

Arrays sind Null-basiert


----------



## soap88 (6. Jan 2008)

ok. wenn es heisst, dass die daten zw. den ziffern  1-9 bestehen sollen, dann ist das wie oben beschrieben erfüllt? einfach data[0]=0.

ich hab noch ein problem. ich will folg. methode erstellen. diese soll den inhalt des arrays ausgeben. in diesem fall z.B.:
int data[]={0465789324}. 
für data[1]=4 soll der robot putBeepers(4) ausführen, für data[2]=6 soll der robot 6 Beeper legen usw. bis das array durch ist von 1-9.
so wie ich das gemacht habe legt er 3456789, egal was ich für b=data[] eingebe. der inhalt des arrays wird garnicht ausgelesen.



```
void write(){
        for(int b=data[1]; b<data.length;b++){
	     putBeepers(b);
	     move();
	     }	
}
```

danke im vorraus.
gruß
soap


----------



## The_S (7. Jan 2008)

> ok. wenn es heisst, dass die daten zw. den ziffern 1-9 bestehen sollen, dann ist das wie oben beschrieben erfüllt? einfach data[0]=0.



Das heißt doch nur, dass dein Array nur Werte zwischen 1 und 9 aufnehmen soll. Mit der Struktur deines Arrays hat das nichts zu tun.

Für dein 2. Problem:

Natürlich anstelle von


```
putBeepers(b);
```

das hier schreiben


```
putBeepers(data[b]);
```

. BTW: Warum fängt die Schleife bei dem Wert eines Elements an, und hört beim erreichen der Array-length auf zu zählen? Da scheint mir ein Logikfehler drin zu sein.

Generell solltest du dir nochmal ein Java-Buch/Tutorial angucken, und dir von diesem nochmal Arrays erklären lassen.


----------



## soap88 (7. Jan 2008)

zum 1. Problem: 
Ich habs verstanden 

zum 2.Problem: 
Funktioniert auch wie ich es wollte, lag an putBeepers(data*). Hätte auch selbst draukommen müssen, egal, danke.





			Warum fängt die Schleife bei dem Wert eines Elements an, und hört beim erreichen der Array-length auf zu zählen? Da scheint mir ein Logikfehler drin zu sein.
		
Zum Vergrößern anklicken....


Das soll ja von 1-9 durch. für data[1] legt der robot 4 Beeper und läuft usw bis data[9], bis zum letzten array.
Der robot hat dann die Elemente der Reihe nach abgelegt.


Ich verstehe ein Sache nicht: 

"das Attribut data (soll) mit dem Array dat initialisiert werden" im Konstruktor Robot(int st, int av, int[] dat)
Was soll das bringen und wie rufe ich das dann auf im task? 

Ich hab das folg.:



		Code:In die Zwischenablage kopieren


Robot(int st, int av, int[] dat) {
     super(st, av, 999999, East);
     data=dat;
}

*


----------



## The_S (7. Jan 2008)

und was wenn data[1] z. B. 9 ist? Dann wird erst beim 9. Element angefangen zu zählen.

Das soll bringen, dass man das Programm mit anderen Parametern aufrufen kann. Du übernimmst das Übergebene Array und erstellst nicht selber eines.


----------



## Guest (7. Jan 2008)

> und was wenn data[1] z. B. 9 ist? Dann wird erst beim 9. Element angefangen zu zählen.



Nein, ich hab doch festgelgt, dass bei b=data[1] angefangen werden soll, nach jedem schleifendurchgang wird 1 dazu addiert also data[2] usw., habs eben mit data[1]=9 ausprobiert und der robot fängt bei 1 an und legt 9 beeper.






> Das soll bringen, dass man das Programm mit anderen Parametern aufrufen kann. Du übernimmst das Übergebene Array und erstellst nicht selber eines.



und wie führe ich das im task aus? 
denn da kommt die meldung "cannot be resolve" wenn ich da data hinschreibe.


```
class Robot extends XYZ {
     Robot(int st, int av, int[] dat) {
          super(st, av, 999999, East);
          data=dat;
          }
}

task{

     Robot mike=new Robot (1,1,???);
     mike.dance();
     }
```


----------



## The_S (8. Jan 2008)

Anonymous hat gesagt.:
			
		

> > und was wenn data[1] z. B. 9 ist? Dann wird erst beim 9. Element angefangen zu zählen.
> 
> 
> 
> Nein, ich hab doch festgelgt, dass bei b=data[1] angefangen werden soll, nach jedem schleifendurchgang wird 1 dazu addiert also data[2] usw., habs eben mit data[1]=9 ausprobiert und der robot fängt bei 1 an und legt 9 beeper.



Genau das hast du eben nicht festgelegt.



			
				Anonymous hat gesagt.:
			
		

> > Das soll bringen, dass man das Programm mit anderen Parametern aufrufen kann. Du übernimmst das Übergebene Array und erstellst nicht selber eines.
> 
> 
> 
> ...



Les dir bitte nochmal gründlich die Grundlagen durch (und nehm dir dafür mehr Zeit, als nur 1, 2 Tage). Vorher hat es wenig Sinn dir noch weitere Hilfestellung zu geben, ohne dass man dir hier die Grundlagen beibringt (was nicht Sinn und Zweck eines Forums ist).


----------

