Bits zusammen zählen

j90ava

Mitglied
Hallo, ich habe eine Liste von 0 und 1.
Beispiel: [1,0,0,0,1,1,1,1,1,1,1,1,0,1]
Aus dieser Liste will ich alle einsen zusammen zählen, aber es gibt folgende Regeln.
Einsen werden nur zusammen gezählt wenn darauf eine Eins folgt und nach 8 Einsen (also einem Byte) wird wieder von vorne angefangen.
Folgendes habe ich schon:
Mein Lösungsansatz ist durch einen Zähler die Anzahl zu ermitteln, nur komme ich nicht weiter wie man diese Regeln implementiert.
Kann mir vielleicht einer einen Tipp geben?

Java:
int counter = -1;
		for (Integer bit : bits){
			if (bit == 1){
				saves.add(bit);
			}
		}
 
Speichere ob der letzte Durchgang eine 1 war und überprüfe dann ob das momentane Bit eine 1 ist, wenn ja zähle Dünen Counter hoch. Danach schaust du ob es schon 8 Einsen sind, wenn ja, dann fang von vorne an. Wenn nein, speichere den aktuellen Wert und mache das ganze nochmal.
 
Mittlerweile bin ich so weit
Java:
int counter = -1;
if (bit == 0) {
				counter = 0;
			}
			if (bit == 1) {
				counter = counter +1;
				if (counter == 8){
					counter = 0;
				}
			}

Problem ist noch, dass er wenn eine 0 kommt nicht wieder von vorne bei 0 anfängt, sondern dann bei 1 weiter zählt-
 
Habs selbst hin bekommen
Lösung:

Java:
int counter = -1
if (bit == 1) {
				counter = counter + 1;
				if (counter == 8) {
					counter = 0;
				}
			}
			if (bit == 0) {
				counter = -1;
			}

Danach muss man nur noch die -1 (die eigentlich 0 sein sollen) mit 0 ersetzen, fertig 😉
Trotzdem danke!
 
Für [1,1,0,0,0,0,0] würde dein Programm dann aber -4 ausgeben.
Wie lautet denn die komplette Aufgabenstellung? Ich vermute mal das soll eher so aussehen.
Java:
static int bits(int[] bits) {
    int counter = 0;
    int lastBit = 0;
    for(int i = 0; i < bits.length; i++) {
        if(i%8 == 0) lastBit = 0;
        if(lastBit == 1 && bits[i] == 1) counter++;
        lastBit = bits[i];
    }
    return counter;
}
 

Zurück
Oben