Verundung dynamisch gestalten

JavaUndC-Prog

Bekanntes Mitglied
Hallo,

ich überlege derzeit, wie man verhältnismäßig dynamisch eine Verundung in Java implementieren kann. Ich will einmal weiter ausholen was ich meine:
Eine einfache Verundung wäre beispielsweise sowas A && B, hier hätte man dann zwei Parameter, Namentlich A und B. Jetzt gibt es eine größere Verundung nennen wir sie A && B && C. Ich würde diese Verundung gerne etwas dynamischer gestalten, etwa in dieser Form: Anzahl Parameter = 4, dann wäre die Verundung folgende A && B && C && D, wobei ich mir das Resultat der Verundung dann gerne speichern möchte.

Jetzt habe ich selber mal etwas überlegt und mir mehrere Methoden geschrieben. Mit einer Überladung der Parameter wähle ich dann die richtige Methode aus. Das ist vllt. eine Lösung wenn man recht statisch arbeiten möchte, aber angenommen, ich möchte das etwas flexibler gestalten, was wären dann mögliche Ansätze? Achso ganz wichtig an dieser Stelle ist zu nennen, dass die Variablen A bis D (im Beispiel) boolesche Ausdrücke sind!

Vielleicht hat hier Jemand einen guten Ratschlag für mich, ich würde mich sehr freuen :)
 

JavaUndC-Prog

Bekanntes Mitglied
Java:
boolean and(boolean ... values) {
    for (boolean value : values) {
        if (!value) { return false; }
    }
    return true;
}

Ja sowas ist gut! Aber jetzt lege ich mal eine Schippe drauf, angenommen die && wären ||, dann ginge das beispielsweise nicht, wie würdest du dort verfahren? Nach einem unwahren Wert in der Verundung zu suchen ist gut, aber bei einer Veroderung würde das beispielsweise nicht greifen. Ich bin gespannt :)

@mrBrown ich denke das geht in Richtung dynamisch in der Anzahl der Elemente. ich stelle mir vor, ich gebe einen Parameter an und mit diesem kann ich dann x Literale Verunden oder Verodern. Also parameter = 5, würde dann A && B && bedeuten C && ... && E
 
K

kneitzel

Gast
Bei oder drehst du es nur um. Du gehst die Werte durch und bei einem wahren Wert gibst du true zurück. Ist kein wahrer Wert dabei, dann false.
 

mrBrown

Super-Moderator
Mitarbeiter
Ja sowas ist gut! Aber jetzt lege ich mal eine Schippe drauf, angenommen die && wären ||, dann ginge das beispielsweise nicht, wie würdest du dort verfahren? Nach einem unwahren Wert in der Verundung zu suchen ist gut, aber bei einer Veroderung würde das beispielsweise nicht greifen. Ich bin gespannt :)

z.B. den Operator auch noch mitgeben: (nur am Handy getippt, könnte Fehler enthalten)

Java:
boolean function(BiPredicate<Boolean, Boolean> operator, boolean first, boolean ... rest) {
    boolean result = first;
    for (boolean value : values) {
        first = operator.test(first, value);
    }
    return result;
}
 

White_Fox

Top Contributor
So zum Beispiel:

Java:
public boolean dynamicOR(boolean... params){
    boolean tmp = false; //Jaja, ich weiß, tmp ist böse...
 
    for(boolean b : params){
        tmp = tmp || b;
    }
    return tmp;
}

Edit:
Da waren andere schneller :(

Edit 2:
Da hat sich noch ein Fehler im Code eingeschlichen, tmp muß mit tmp = false; initialisiert werden. Sonst kommt immer true raus, auch wenn du nur falses in die Methode gesteckt hast.
 

JavaUndC-Prog

Bekanntes Mitglied
So zum Beispiel:

Java:
public boolean dynamicOR(boolean... params){
    boolean tmp = true; //Jaja, ich weiß, tmp ist böse...
 
    for(boolean b : params){
        tmp = tmp || b;
    }
    return tmp;
}

Edit:
Da waren andere schneller :(
Find ich gut. Ich würde das gerne noch testen wollen! Mir gefällt die Lösung, weil du auf
BiPredicate verzichtest!

Ich bedanke mich einmal recht herzlich bei euch, das gibt mir wieder die Gelegenheit etwas dazu zu lernen! Die Antworten gefallen mir, falls und wenn Jemand anderes noch etwas dazu betragen will, ist das natürlich auch gerne gesehen. Aber bis hierhin einmal Danke!
 
K

kneitzel

Gast
z.B. den Operator auch noch mitgeben: (nur am Handy getippt, könnte Fehler enthalten)

Java:
boolean function(BiPredicate<Boolean, Boolean> operator, boolean first, boolean ... rest) {
    boolean result = first;
    for (boolean value : values) {
        first = operator.test(first, value);
    }
    return result;
}

Das dürfte nicht immer funktionieren, denn das Element first prüfst Du zwei Mal. Das kann z.B. bei xor dann zu einem falschen Ergebnis führen, so der erste Wert true ist.
 

White_Fox

Top Contributor
@JavaUndC-Prog
Schön daß wir dir helfen konnten...viel Spaß beim Weitermachen.

Nenn es result oder so, dann ist jeder zufrieden :p (warum sollten temporäre Variablen grundsätzlich böse sein?
Ich hab mal irgendwo gelesen, daß tmp als Variablenname als ungünstig angesehen wird, da es meist recht nichtssagend ist. Aber zumindest in diesem Fall beschreibt tmp - im Sinne von temporär - ja eigentlich exakt die Funktion der Variable: ein Zwischenergebnis. result dagegen...würde ich in diesem Kontext eher als weniger treffend ansehen.
Aber wie so oft, wenn wir uns hier über Coding Styles unterhalten: Es kommt wohl mal wieder auf den Einzelfall an. :)

Den Namen result benutze ich allerdings (fast) immer in Unittests für das, was die Testinstanz zurückgeliefert hat.
assertEquals(result, expResult); liest sich einfach zu gut.
 

mrBrown

Super-Moderator
Mitarbeiter
Das dürfte nicht immer funktionieren, denn das Element first prüfst Du zwei Mal. Das kann z.B. bei xor dann zu einem falschen Ergebnis führen, so der erste Wert true ist.

Oh, in der vierten Zeile sollte natürlich nur noch result stehen -.-

Java:
boolean function(BiPredicate<Boolean, Boolean> operator, boolean first, boolean ... rest) {
    boolean result = first;
    for (boolean value : values) {
        result = operator.test(result, value);
    }
    return result;
}
 

mihe7

Top Contributor
Ich habe gerade keinen Stift und Papier zur Hand aber, das klingt jetzt erstmal einfach. Ist das wirklich so? Das muss ich prüfen...
Ganz einfach: wenn ein true dabei ist, liefert OR true.

Dem entsprechend:
Java:
boolean or(boolean ... values) {
    for (boolean value : values) {
        if (value) { return true; }
    }
    return false;
}
 
X

Xyz1

Gast
:)

Java:
	public static double strongness(Boolean... bs) {
		return Stream.of(bs).mapToInt(b -> b ? 1 : 0).average().getAsDouble();
	}

	public static boolean and(Boolean... bs) {
		return strongness(bs) == 1;
	}

	public static boolean or(Boolean... bs) {
		return strongness(bs) != 0;
	}

	public static void main(String[] args) throws Exception {
		System.out.println(and(true, true, false));
		System.out.println(or(false, true, false));
		System.out.println(and(true, true, true));
	}
 

httpdigest

Top Contributor
Wtf? "strongness"?! Einfach anyMatch und allMatch nehmen:
Java:
import java.util.stream.Stream;
public class BooleanOperators {
  public static boolean and(Boolean... bs) {
    return Stream.of(bs).allMatch(Boolean.TRUE::equals);
  }
  public static boolean or(Boolean... bs) {
    return Stream.of(bs).anyMatch(Boolean.TRUE::equals);
  }
}
 
X

Xyz1

Gast
Aber das Problem ist der doppelte Code. Du hast das Problem nicht weit genug zerlegt und abstrahiert... imo

Und naja, "strongness" dachte ich mir vorhin aus :D
 

httpdigest

Top Contributor
Aber das Problem ist der doppelte Code. Du hast das Problem nicht weit genug zerlegt und abstrahiert... imo
Das stimmt wohl. Man kann natürlich anyMatch und allMatch als Method References rausziehen:
Java:
import java.util.function.BiFunction;
import java.util.function.Predicate;
import java.util.stream.Stream;
public class BooleanOperators {
  private static boolean f(BiFunction<Stream<Boolean>, Predicate<? super Boolean>, Boolean> op, Boolean... bs) {
    return op.apply(Stream.of(bs), Boolean.TRUE::equals);
  }
  public static boolean and(Boolean... bs) {
    return f(Stream::allMatch, bs);
  }
  public static boolean or(Boolean... bs) {
    return f(Stream::anyMatch, bs);
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
districon Dynamisch Programmierung/Backtracking/Memoization Java Basics - Anfänger-Themen 3
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
N Dynamisch erzeugtes Label wird nicht angezeigt, TextField schon Java Basics - Anfänger-Themen 1
D Koordinatensystem dynamisch anpassen Java Basics - Anfänger-Themen 17
J Tableview, ObservableList ein bisschen dynamisch Java Basics - Anfänger-Themen 6
C Array - Länge dynamisch übergeben Java Basics - Anfänger-Themen 7
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
G Array dynamisch ausgeben Java Basics - Anfänger-Themen 3
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
F Erste Schritte If Bedingung in Schleife dynamisch erweitern Java Basics - Anfänger-Themen 4
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
Y Eingabe-Formular mit JSP dynamisch machen - j/n/wie? Java Basics - Anfänger-Themen 2
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
R Objekte dynamisch erstellen? Java Basics - Anfänger-Themen 14
C Variablen Array dynamisch halten und ausrechnen Java Basics - Anfänger-Themen 14
N Ergebnisse dynamisch in Tabelle schreiben Java Basics - Anfänger-Themen 3
G JObjekte dynamisch vom Server erzeugen lassen Java Basics - Anfänger-Themen 4
I Dynamisch erzeugten Buttons Methoden zuweisen Java Basics - Anfänger-Themen 6
H Objekte dynamisch erzeugen? Java Basics - Anfänger-Themen 6
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
S if-Block dynamisch aufbauen Java Basics - Anfänger-Themen 5
M Static Variable "dynamisch" aufrufen? Java Basics - Anfänger-Themen 8
B Klassen Objekte während der Laufzeit dynamisch anlegen Java Basics - Anfänger-Themen 8
A JButtons dynamisch generieren mit verschiedenen actionhandlern Java Basics - Anfänger-Themen 6
P Scrollpane mit dynamisch erzeugten Komponenten Java Basics - Anfänger-Themen 3
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
A Dynamisch die Anzahl der Threads in der Cyclic Barrier ändern Java Basics - Anfänger-Themen 2
K Datentypen Full qualified Name dynamisch gestalten Java Basics - Anfänger-Themen 7
M For-Schleifen dynamisch generieren? Java Basics - Anfänger-Themen 10
sqsh statische jlabels dynamisch verwalten Java Basics - Anfänger-Themen 2
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2
D JPanel dynamisch anpassen Java Basics - Anfänger-Themen 5
S Dialog dynamisch vergrößern Java Basics - Anfänger-Themen 2
S Dynamisch Zeit auslesen Java Basics - Anfänger-Themen 11
M JTextPane dynamisch erzeugen Java Basics - Anfänger-Themen 2
J Aufgaben Dynamisch auf Pool von Threads verteilen. Java Basics - Anfänger-Themen 3
D ArrayList dynamisch befüllen Java Basics - Anfänger-Themen 14
G Objekteigenschaften dynamisch erzeugen Java Basics - Anfänger-Themen 7
jnoob Checkbox in Dialog Dynamisch erstellen Java Basics - Anfänger-Themen 2
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
J ListModel dynamisch und schnell aber sicher ändern Java Basics - Anfänger-Themen 7
M Dynamisch Instanzen erstellen. Java Basics - Anfänger-Themen 4
G Zweidimensionales Array - dynamisch Java Basics - Anfänger-Themen 4
B arrays dynamisch vergrößern Java Basics - Anfänger-Themen 5
V Kundenklasse dynamisch erzeugen und id hochzählen? Java Basics - Anfänger-Themen 4
C Dynamisch durch alle Objektvariablen eines Objektes iteriere Java Basics - Anfänger-Themen 15
P JPanel dynamisch mit ActionListener verwalten Java Basics - Anfänger-Themen 3
R Arraygroesse dynamisch anpassen Java Basics - Anfänger-Themen 8
X this dynamisch, super statisch? Java Basics - Anfänger-Themen 3
G Namen von ArrayListen dynamisch erzeugen Java Basics - Anfänger-Themen 4
H variable dynamisch ändern Java Basics - Anfänger-Themen 2
G Klasse dynamisch ohne Datei compilieren: Fehler Java Basics - Anfänger-Themen 4
G Klasse dynamisch nachladen: Fehler Java Basics - Anfänger-Themen 9
T Array Dynamisch Erweiterm Java Basics - Anfänger-Themen 15
H dynamisch Klassen laden und ausführen Java Basics - Anfänger-Themen 3
M Gleichungen dynamisch erstellen und ausrechnen? Java Basics - Anfänger-Themen 8
G Pfad dynamisch gestalten. Java Basics - Anfänger-Themen 3
B Matrix Dynamisch erzeugen Java Basics - Anfänger-Themen 3
G JTable dynamisch erzeugen. Java Basics - Anfänger-Themen 2
D Labels Dynamisch ? Java Basics - Anfänger-Themen 5
6 Swing: Dynamisch erzeugte Objekte sind verschoben Java Basics - Anfänger-Themen 2
G Variablenname dynamisch vergeben Java Basics - Anfänger-Themen 10
H 2DArray manuell dynamisch erweitern Java Basics - Anfänger-Themen 7
G Länge eines Array trimmen oder dynamisch verändern. Java Basics - Anfänger-Themen 3
M Dynamisch Klassen aufrufen Java Basics - Anfänger-Themen 4
H JLabel dynamisch anzeigen? Java Basics - Anfänger-Themen 10
T ActionListener zu Buttons dynamisch zuordnen Java Basics - Anfänger-Themen 10
G dynamisch Jtextfields erzeugen Java Basics - Anfänger-Themen 3
M HTML Seite die Daten in JavaApplet dynamisch verarbeiten Java Basics - Anfänger-Themen 2
H Variablenname dynamisch festlegen Java Basics - Anfänger-Themen 3
H Variablenname dynamisch festlegen Java Basics - Anfänger-Themen 3
J Tabelle mit mehreren Zeilen dynamisch aufbauen Java Basics - Anfänger-Themen 2
K Bild dynamisch erstellen Java Basics - Anfänger-Themen 2
M Klasse dynamisch erzeugen! Java Basics - Anfänger-Themen 4
M [SOLVED]JComboBoxen dynamisch erstellen und abfragen Java Basics - Anfänger-Themen 2
S Dynamisch Platz für ein Array reservieren? Java Basics - Anfänger-Themen 7
Z Objekte dynamisch erzeugen Java Basics - Anfänger-Themen 19
O Variabelnamen dynamisch generieren Java Basics - Anfänger-Themen 3
E Klassenaufrufe dynamisch mit Reflection Java Basics - Anfänger-Themen 4
J Instanzen dynamisch erzeugen Java Basics - Anfänger-Themen 8
G jar dynamisch laden Java Basics - Anfänger-Themen 6
B Kann man in Java Variablen dynamisch generieren? Java Basics - Anfänger-Themen 3
B JTextField dynamisch anpassen Java Basics - Anfänger-Themen 6
G Komponenten dynamisch auf contentPane einbinden Java Basics - Anfänger-Themen 5
S Objekte dynamisch anlegen Java Basics - Anfänger-Themen 3
G Objekt Namen dynamisch vergeben. Java Basics - Anfänger-Themen 7
T Newbie Frage. Vector dynamisch benennen :( Java Basics - Anfänger-Themen 5
F Objekte dynamisch erstelle Java Basics - Anfänger-Themen 11
M String und Int Arrays dynamisch die Größe verändern Java Basics - Anfänger-Themen 7
C eine Liste dynamisch erzeugen ? Java Basics - Anfänger-Themen 6
G klasse dynamisch aufrufen, wie? Java Basics - Anfänger-Themen 6
G JToolbar dynamisch erweitern Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben