RLE Codierung

Status
Nicht offen für weitere Antworten.
S

soap88

Gast
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

Top Contributor
Als Ansatz:

Code:
		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!?
 
S

soap88

Gast
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??
 
S

soap88

Gast
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.

Code:
         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
 
S

soap88

Gast
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.


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

danke im vorraus.
gruß
soap
 

The_S

Top Contributor
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

Code:
putBeepers(b);

das hier schreiben

Code:
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

Neues Mitglied
zum 1. Problem:
Ich habs verstanden :D

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.

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:
Robot(int st, int av, int[] dat) {
     super(st, av, 999999, East);
     data=dat;
}
 

The_S

Top Contributor
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.
 
G

Guest

Gast
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.

Code:
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

Top Contributor
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.

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

Code:
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();
     }

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).
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben