Alle true Werte eines boolean Arrays herausfiltern

Alucardd

Mitglied
Hey Leute,

suche seit einiger Zeit nach einer Lösung hierfür. Auch hier im Forum habe ich leider nichts dazu finden können.

Also ich habe ein boolean Array und möchte diesen auf alle, sich darin befindlichen, "true" Werte überprüfen und diese dann separat abspeichern. Am besten in einem array damit ich einen davon mit einem randomInteger anwählen kann.

hier mein Ansatz:
Java:
[......]

For (int i =0;i<array.length;i++) {
         If (array == true) {
              variableFürPosition = i;
               i=0;

Ich weiß wie ich mit einer for Schleife mein Array auf einen Wert durchsuche. Aber sobald ein Wert mit true gefunden wurde, endet die Schleife und alle Werte danach werden ignoriert. Wenn ich mein int im body am Ende auf 0 setze damit die Schleife von vorne beginnt macht er das zwar immer wieder aber hört ja auch immer wieder am selben Array auf bevor er die anderen prüfen kann. Dabei möchte die Position jedes true Wertes kennen damit ich einen davon zufällig anwählen kann.

Wäre super wenn mir jemand helfen könnte.

Danke im voraus.


Mfg
Alu
 
Zuletzt bearbeitet:

temi

Top Contributor
Bitte verwende Code-Tags (die drei Punkte neben dem Smiley), sonst wird dein Code nicht richtig angezeigt (z.B. werden die eckigen Klammern falsch interpretiert).

Ansonsten: Du musst deine gefundenen Positionen natürlich in einem zweiten Array (besser, ArrayList, weil dynamisch) speichern, wenn es sich um mehrere zu speichernde Daten handelt.
 

Alucardd

Mitglied
Bitte verwende Code-Tags (die drei Punkte neben dem Smiley), sonst wird dein Code nicht richtig angezeigt (z.B. werden die eckigen Klammern falsch interpretiert).

Ansonsten: Du musst deine gefundenen Positionen natürlich in einem zweiten Array (besser, ArrayList, weil dynamisch) speichern, wenn es sich um mehrere zu speichernde Daten handelt.

Habe es geändert.

Listen hatten wir leider noch nicht und ich bin mir nicht sicher ob wir die benutzen dürfen.

Wenn ich ein Array für die Positionen erstelle, muss ich ja wissen wie groß das Array sein muss. Aber die Anzahl an true Werten ist variabel(sorry das hatte ich vergessen in meinem Post). Also es kann sein, dass der erste Wert "true" ist und alle andern "false" oder aber auch 2 "true" und 2 "false" etc.
 

temi

Top Contributor
Habe es geändert.

Listen hatten wir leider noch nicht und ich bin mir nicht sicher ob wir die benutzen dürfen.

Wenn ich ein Array für die Positionen erstelle, muss ich ja wissen wie groß das Array sein muss. Aber die Anzahl an true Werten ist variabel(sorry das hatte ich vergessen in meinem Post). Also es kann sein, dass der erste Wert "true" ist und alle andern "false" oder aber auch 2 "true" und 2 "false" etc.

Da fehlt noch der Index in der if-Bedingung.

Da gibt es mehrere Möglichkeiten:

  1. Zähle zuerst alle true-Werte, dann kannst du das Ergebnis-Array erstellen und in einer zweiten Runde die Werte einfügen.
  2. Erstelle ein Ergebnis-Array, dass genauso groß ist wie das Ausgangsarray, zähle gleichzeitig wieviele Werte es enthält und kopiere die Werte am Ende in ein drittes Array.
  3. Bau dir eine Klasse für ein dynamisches Array, das sich selbst vergrößert. Ich schätze mal diese Lösung fällt aus, bei deinem Kenntnisstand.
 

temi

Top Contributor
Also ich habe ein boolean Array und möchte diesen auf alle, sich darin befindlichen, "true" Werte überprüfen und diese dann separat abspeichern.

Noch einmal zur Klarstellung: Möchtest du die true-Werte speichern (was recht sinnlos ist) oder möchtest du den Index speichern, an dessen Stelle im Ausgangsarray sich ein true-Wert befindet?
 

Alucardd

Mitglied
Das habe ich übersehen. Muss wohl beim kopieren iwie verloren gegangen sein. Kann es jetzt aber nicht mehr ändern da 30min vorbei sind.

Die erste Variante die du vorgeschlagen hast war auch mein Plan. Nur weiß ich nicht wie ich die "true" Werte zählen soll.
Das hab ich mit meiner for schleife versucht aber damit bekomme ich nur den ersten "true" wert den er erwischt.
 

temi

Top Contributor
Nur weiß ich nicht wie ich die "true" Werte zählen soll.

Naja, man zählt indem man eine Zählvariable z.B. vom Typ int um 1 erhöht, wenn ein passendes Element gefunden wurde.

Java:
int zaehler;
for (int i = 0; i < array.length; i++) {
    if (array[i]) {
        // hier zählen
    }
}
 
Zuletzt bearbeitet:

Alucardd

Mitglied
D
Naja, man zählt indem man eine Zählvariable z.B. vom Typ int jeweils um 1 erhöht, wenn ein passendes Element gefunden wurde.

Java:
int zaehler;
for (int i = 0; i < array.length; i++) {
    if (array[i]) {
        // hier zählen
    }
}

Danke dir. Weiß nicht warum ich da nicht drauf gekommen bin nen int Zähler zu erstellen..
Kann aufjedenfall wieder weiterarbeiten erst mal :)
 

mihe7

Top Contributor
Wenn es nur darum geht, am Ende eines der Elemente zufällig herauszupicken und Du das Mehr an Speicher verkraften kannst, kannst Du Dir das Zählen vorab auch sparen. Dazu machst Du Dein int-Array so groß wie Dein boolean-Array und zählst während des Füllens einfach mit.
 

Alucardd

Mitglied
Wenn es nur darum geht, am Ende eines der Elemente zufällig herauszupicken und Du das Mehr an Speicher verkraften kannst, kannst Du Dir das Zählen vorab auch sparen. Dazu machst Du Dein int-Array so groß wie Dein boolean-Array und zählst während des Füllens einfach mit.

Ich hab jetzt meinen Code soweit fertig aber er macht nicht das was ich möchte.

Vielleicht zum allgemeinen Verständnis:
ich soll in einem Pac-Man Spiel den comp1 programmieren der zuerst alle Richtungen um sich herum prüft (also ob sie durch eine Wand versperrt werden oder nicht) und dann in eine der freien Richtungen geht. Die Wahl der freien Richtung soll zufällig sein.

ich vermute dass mein Fehler in diesem code Abschnitt liegt:
[….]

Java:
for(int i=0;i<moeglicheRichtung.length;i++) {
            if (moeglicheRichtung[i] == true) {
                indexPosition[zaehler] = i;
            }
}

Hier will ich ein Array (indexPosition) mit den index Nummern des Arrays(möglicheRichtung) bei denen moeglicheRichtung = "true" ist füllen. Also mit den Richtungen die nicht versperrt sind.
(in zaehler ist die anzahl der Richtungen die nicht versperrt sind, also die größe meines indexPosition Arrays)

Ich vermute dass indexPosition[zaehler] nicht bei jedem durchgang seinen index wechselt...

Ich habe die Aufgabe allgemein vermutlich viel komplizierter gemacht als sie ist aber generell sollte der Rest stimmen.
 

Alucardd

Mitglied
Stimmt! hab es jetzt so:

Code:
for(int i=0;i<moeglicheRichtung.length;i++) {           
            if (moeglicheRichtung[i] == true) {               
                indexPosition[zaehler] = i;
                zaehler ++;
            }
        }

bin mir gerade nur nicht sicher ob indexPosition[zaehler] im ersten durchlauf auch 0 ist. Ist das so?
 

temi

Top Contributor
Stimmt! hab es jetzt so:

Code:
for(int i=0;i<moeglicheRichtung.length;i++) {       
            if (moeglicheRichtung[i] == true) {           
                indexPosition[zaehler] = i;
                zaehler ++;
            }
        }

bin mir gerade nur nicht sicher ob indexPosition[zaehler] im ersten durchlauf auch 0 ist. Ist das so?

Die Frage lässt sich mit dem gegebenen Code nicht beantworten, weil man nicht sieht, was vorher mit "zaehler" passiert:
int zaehler = 5; // Zähler ist nicht Null ;)

Edit:

int zaehler; reicht aus, um eine mit 0 initialisierte Integervariable zu deklarieren, aber man kann es auch noch klarer formulieren mit: int zaehler = 0;. Damit drückt man für sich (oder andere Leser des Codes) direkt aus, dass man hier eine Variable deklarieren möchte und zwar explizit mit 0 initialisiert. Das kann die Lesbarkeit verbessern.
 
Zuletzt bearbeitet:

Alucardd

Mitglied
Die Frage lässt sich mit dem gegebenen Code nicht beantworten, weil man nicht sieht, was vorher mit "zaehler" passiert:
int zaehler = 5; // Zähler ist nicht Null ;)

Edit:

int zaehler; reicht aus, um eine mit 0 initialisierte Integervariable zu deklarieren, aber man kann es auch noch klarer formulieren mit: int zaehler = 0;. Damit drückt man für sich (oder andere Leser des Codes) direkt aus, dass man hier eine Variable deklarieren möchte und zwar explizit mit 0 initialisiert. Das kann die Lesbarkeit verbessern.


ich war gerade verwirrt weil ich dachte ich muss die gleiche variable (zaehler) die ich zum initialisieren des arrays indexPosition benutzt habe hier auch in der for schleife benutzen. Aber eigentlich kann ich es ja auch einfach so machen oder?

Java:
int b = 0;
       
        for(int i=0;i<moeglicheRichtung.length;i++) {          
            if (moeglicheRichtung[i] == true) {              
                indexPosition[b] = i;                  
                b ++;
            }
        }

habe einfach eine neue variable gemacht für das hochzählen des index von indexPosition. b kann ja maximal nur so hoch sein wie meine variable "zaehler".

Danke für die hilfe euch beiden :)
allerdings macht mein Code immer noch nicht das was ich möchte.. also der comp1 bewegt sich eigentlich überhaupt nicht. Aber dazu müsste man meinen ganzen Quelltext für comp1 einsehen nehme ich an. Den kann ich aber hier nicht posten leider wegen dem prüf-system meiner uni.
 

Ullenboom

Bekanntes Mitglied
Eine Alternative, auch wenn das definitiv keine für Anfänger ist:

Java:
boolean[] bools = { true, true, false, false, true, false, true, false };
int[] ints = IntStream.range( 0, bools.length ).filter( index -> bools[ index ] ).toArray();
System.out.println( Arrays.toString( ints ) );
 

Alucardd

Mitglied
Sowas darf ich leider nicht benutzen hier aber trotzdem danke für den Vorschlag.

Ich glaube aber dass der Fehler in meinem Quelltext wo ganz anders liegt.
Stehe extrem auf dem Schlauch und weiß nicht mehr was ich machen soll.
Ich habe meines Wissens nach alles so programmiert wie es sein sollte und ich habe meinen Quellcode mehrfach auf Fehler überprüft aber finde einfach nichts. Bei der Syntax wird mir auch kein Fehler angezeigt und trotzdem bewegt sich mein Pac-Man Geist nicht wenn ich das Programm starte.
Das einzige was mir jetzt noch eingefallen ist, dass ich hier vielleicht jemanden finde der kurz über meinen Code schauen möchte. Wenn jemand Interesse hat schreib mich bitte an oder antworte hier.
Würde den Quellcode dann per Messenger schicken.
 

Phash

Top Contributor
Also ich habe ein boolean Array und möchte diesen auf alle, sich darin befindlichen, "true" Werte überprüfen und diese dann separat abspeichern. Am besten in einem array damit ich einen davon mit einem randomInteger anwählen kann.

ich versteh nicht, was du mit "abspeichern" meinst - was willst du speichern? lauter trues?
du willst die Positionen speichern
Code:
bool[] arr = ... hier das boolean Array
int zaehler;
int[] ergebnis = int[arr.length]; // eine Liste wäre schöner -> List<Integer> ergebnis = new ArrayList<>();
int e = 0;
for (int i = 0; i < arr.length; i++){
    if (arr[i]){
        ergebnis[e] = i;
        e++;
    }
}

Dann hast du in ergebnis alle Positionen des ursprünglichen Arrays, an denen true-werte liegen. und kannst dir die holen. Mit einer Liste ist es schöner. Und du kannst es auch noch hübscher machen, und das ergebnis Array kleiner gestalten...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
missy72 Methoden Alle rekusiven Aufrufe abbrechen Java Basics - Anfänger-Themen 21
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
E Select nimmt nicht alle Where /AND befehlen an Java Basics - Anfänger-Themen 4
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
R Methoden Eclipse schlägt mir nicht alle Möglichkeiten vor Java Basics - Anfänger-Themen 4
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
L Alle Ziele in einem Raster abknallen Java Basics - Anfänger-Themen 17
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
Dimax Erste Schritte String replace alle Zeichen Java Basics - Anfänger-Themen 10
L Wie vergrößere ich ein Rechteck in alle Richtungen um eins und bekomme dessen Rand? Java Basics - Anfänger-Themen 2
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
X Erste Schritte String: Alle doppelten Leerzeilen entfernen Java Basics - Anfänger-Themen 21
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
D Alle Möglichkeiten, n-Anzahl aus Elementen aus einem Array zu wählen, ausgeben? Java Basics - Anfänger-Themen 23
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
A In einem String alle Eigennamen zählen Java Basics - Anfänger-Themen 6
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
B Webservice -> alle parameter bekommen von form Java Basics - Anfänger-Themen 2
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
F Eclipse alle Projekt weg Java Basics - Anfänger-Themen 6
V Alle Komponenten eines JPanels Java Basics - Anfänger-Themen 14
I gemeinsame Config-Datei für alle Windows-User Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
DaCrazyJavaExpert Alle Zahlenkombinationen aus 9 zahlen finden Java Basics - Anfänger-Themen 17
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
M Alle Instanzen einer Klasse ansprechen Java Basics - Anfänger-Themen 4
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
C Alle Zweierpotenzen bis 2^10 ausgeben lassen Java Basics - Anfänger-Themen 15
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
M Input/Output Alle Zeilen auslesen und in Variable speichern Java Basics - Anfänger-Themen 5
W Mozilla Thunderbird email an alle Kontakte Java Basics - Anfänger-Themen 3
F Methode alle 15min ausführen Java Basics - Anfänger-Themen 5
D Alle möglichen Kombinationen in einem Array ausgeben Java Basics - Anfänger-Themen 2
I Alle Laufwerke und deres Pfade ausgeben Java Basics - Anfänger-Themen 6
S Classpath: Alle .jars innerhalb eines Ordners einbinden Java Basics - Anfänger-Themen 4
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
I Programm, welches eine Textzeile einliest und alle darin enthaltenen Buchstaben umwandelt Java Basics - Anfänger-Themen 3
G Wie bekomme ich alle Ausgaben von runTime.exec() Java Basics - Anfänger-Themen 7
L Best Practice Alle Kombinationen aus Listenelementen, Anzahl Listen unterschiedlich Java Basics - Anfänger-Themen 6
M Compiler-Fehler Alle Methoden eines Interfaces Implementiert dennoch Fehler Java Basics - Anfänger-Themen 3
I Alle Zeitzonen in Liste speichern Java Basics - Anfänger-Themen 4
F alle 100ms Befehle ausführen Java Basics - Anfänger-Themen 26
M Alle Sublisten einer bestimmten Laenge berechnen Java Basics - Anfänger-Themen 2
F Alle DEMOS fast veraltet...? Java Basics - Anfänger-Themen 13
J Alle Leerzeichen aus String entfernen Java Basics - Anfänger-Themen 13
D Methoden Alle Siebenstelligen Primpalidrome von PI Java Basics - Anfänger-Themen 6
K Durch alle Attribute eines Objektes iterieren Java Basics - Anfänger-Themen 6
P Klassen Alle Strings einer ArrayList<eigeneKlasse> anspre Java Basics - Anfänger-Themen 2
W String von hinten alle drei Zeichen abschneiden und in umgekehrter Reihenfolge ausgeben. Java Basics - Anfänger-Themen 9
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
M Alle möglichen Strings Java Basics - Anfänger-Themen 5
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
G Methoden Alle Objekte der ArrayList ausgeben funktioniert nicht. Java Basics - Anfänger-Themen 12
N Klassen Class nur einmal ausführen und sie speichert daten für alle anderen classes? Java Basics - Anfänger-Themen 3
M Klassen Auf Alle Array Methoden gleichzeitig zugreifen Java Basics - Anfänger-Themen 8
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
G JFileChooser "alle Dateien" unterbinden Java Basics - Anfänger-Themen 3
S Aus zwei Dateipfaden alle Dateien auslesen Java Basics - Anfänger-Themen 11
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
F Geht in alle Case rein, warum?? Java Basics - Anfänger-Themen 12
R Alle Klassen ermitteln, die Interface implementieren / Reflection Java Basics - Anfänger-Themen 51

Ähnliche Java Themen

Neue Themen


Oben