geschachtelte schleife

pipi195

Mitglied
Ich bräuchte mal eure Hilfe zu geschachtelte Schleifen. Die Aufgabe lautet:
Erstellen Sie im Folgenden ein Programm, das zwei Variablen für Wahrheitswerte definiert
und für alle möglichen Kombinationen der Wertebelegungen dieser Variablen die Ergebnisse
der logischen Operatoren „und“, „oder“ und „exklusiv oder“ ermittelt und ausgibt.

ich hab leider keine ahnung wie ich das implementieren soll 🙁

am ende soll es ungefähr so ausschauen:

false && false liefert false
false || false liefert false
false ^ false liefert false
false && true liefert false
false || true liefert true
false ^ true liefert true
true && false liefert false
true || false liefert true
true ^ false liefert true
true && true liefert true
true || true liefert true
true ^ true liefert false

Danke im Vorraus 🙂
 
Was hast du denn bis jetzt? Und wo genau hast du denn Probleme damit?
Je nach dem was ihr schon alles hattet könnte das da einen Gedankenschubs liefern:
Java:
for (int firstNumber: new int[]{0,1}) {
  for (secondNumber: new int[]{0,1}) {
    System.out.println(firstNumber + " + " + secondNumber + " = " + (firstNumber+secondNumber));
  }
}
 
"logischer operator XOR"

*lach*

sorry ... aber da hat der jenige der dir die aufgabe gegeben hat einen ziemlich großen fehler gemacht

XOR gibt es in java NUR als bit-wise operator ... aber NICHT als logischen operator ...

genau so wenig wie es NOT nur als logischen ... nicht aber als bit-wise operator gibt

die unterschiede werden deutlich wenn man sich die schreibweisen ansieht

bit-wise : & , | , ^
logisch : && , || , !

logische operatoren werden doppelt geschrieben *ausnahme NOT da es dies nicht als bit-wise gibt*
bit-wise werden einzeln geschrieben ...

da BOOL zwar nur 1 bit könnte man annehmen das bool ^ bool = bool ergibt ... es aber nicht der fall ist ...
das ergebnis einer XOR anweisung in java ist *wie auch die beiden anderen bit-wise operatoren* ein INT ... also ganze 32bit ... obwohl du nur 1bit XOR willst ...
 
die unterschiede werden deutlich wenn man sich die schreibweisen ansieht

bit-wise : & , | , ^
logisch : && , || , !

logische operatoren werden doppelt geschrieben *ausnahme NOT da es dies nicht als bit-wise gibt*
bit-wise werden einzeln geschrieben ...

Das stimmt so nicht, du kannst auch
Code:
&
,
Code:
|
und
Code:
^
auf boolsche Werte anwenden. Der Unterschied zwischen
Code:
&
und
Code:
&&
bzw.
Code:
|
und
Code:
||
besteht darin, ob der zweite Operand auch dann ausgewertet wird, wenn das Ergebnis schon feststeht.
Code:
&
und
Code:
|
werten immer beide Operanden aus,
Code:
&&
wertet den zweiten nicht aus, wenn der erste
Code:
false
ist (weil dann das Ergebnis nur
Code:
false
sein kann) und
Code:
||
wertet den zweiten nicht aus, wenn der erste
Code:
true
ist (weil dann das Ergebnis nur
Code:
true
sein kann).

Ein typisches Beispiel sind
Code:
null
-Checks: Du kannst z.B. [c]s == null || s.equals(" ")[/c] schreiben, denn das funktioniert auch, wenn
Code:
s
Code:
null
ist, obwohl der zweite Aufruf
Code:
s
referenziert. Dagegen liefert [c]s == null | s.equals(" ")[/c] eine NullPointerException, wenn
Code:
s
Code:
null
ist.

Da so eine "Kurzschluss-Auswertung" bei
Code:
^
nicht möglich ist (es müssen immer beide Operanden bekannt sein, um das Ergebnis zu ermitteln), gibt es auch keinen speziellen
Code:
^^
-Operator.
 
Zuletzt bearbeitet:
Vielen dank für die zahlreichen Antworten.
hier etwas detailierter beschrieben

a) Erstellen Sie dazu zunächst eine ausführbare Programmdatei BoolenVaules.java.
b) Definieren Sie an geeigneter Stelle zwei Variablen für Wahrheitswerte.
c) Implementieren Sie zwei ineinander geschachtelte Schleifen. Jede dieser Schleifen
modifiziert jeweils eine dieser beiden boolesche Variablen.
d) Im Rumpf (d. h. innerhalb) der inneren Schleife implementieren Sie die
Ausgabeanweisungen. Formatieren Sie die Ausgabe so, dass sie gut lesbar ist. Den Wert
einer booleschen Variablen boolVariable geben Sie mit Hilfe der Anweisung
System.out.print(boolVariable) aus.

[Java]
class BoolenVaules {
public static void main(String[] args){

boolean a;
boolean b;
[/code]

jez müsste ja die schleife rein aber ich hab keine ahnung wie ich diese geschachtelte schleife hinschreiben soll 🙁
 
Java:
public class test{
    
    static boolean a;
    static boolean b;
    
    public static void main(String[] args) {

        for(int i = 0; i < 2; i++){            
            a = !a;
            
            for(int j = 0; j < 2; j++){              
                b = !b;
                
                if(a && b) 
                    System.out.println("true und true: " + true);             
                else if(a && !b)
                    System.out.println("true und false: " + false); 
                else if(!a && b)
                    System.out.println("false und true: " + false);
                else if(!a && !b)
                    System.out.println("false und false: " + false);
            }
        }      
    }
}

Das geht bestimmt besser, nur um dir mal zu zeigen, wie es gemeint sein/gelöst werden könnte 🙂

edit: schon besser 😀

Java:
for(int i = 0; i < 2; i++){            
    a = !a;

    for(int j = 0; j < 2; j++){              
        b = !b;
        System.out.println(a + " und " + b + " ergibt: " + (a&&b));         
     }
}
 
Zuletzt bearbeitet:
ich würds so machen....

Java:
public class Test {
	public static void main(String[] args) {
		boolean[] array = { false, true };

		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array.length; j++) {
				boolean a = array[i];
				boolean b = array[j];
				System.out.println(a + " && " + b + " liefert " + (a && b));
				System.out.println(a + " || " + b + " liefert " + (a || b));
				System.out.println(a + " ^ " + b + " liefert " + (a ^ b));
			}
		}

	}
}
 
ich würds so machen....

Java:
public class Test {
	public static void main(String[] args) {
		boolean[] array = { false, true };

		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array.length; j++) {
				boolean a = array[i];
				boolean b = array[j];
				System.out.println(a + " && " + b + " liefert " + (a && b));
				System.out.println(a + " || " + b + " liefert " + (a || b));
				System.out.println(a + " ^ " + b + " liefert " + (a ^ b));
			}
		}

	}
}

leider hatte ich noch keine arrays...deshalb kann ich es so wahrscheinlich nicht schreiben. Aber trotzdem danke für deine hilfe 🙂 und bei der ausgabe hat mein prof ja hingeschrieben muss i.wo das System.out.print(booleanvariable)hin🙁
 
Ich habs verstanden 😀DDDDDDD
Ich danke euch vielamals, aber allein auf sowas zu kommen könnte ich nicht 🙁
könnt ihr für mich noch i.wie eine Tipp mit auf dem Weg geben, wie ich sowas angehen soll?
 
eine frage: ich hatte bei den festlegungen der attribute noch keine statics verwendet. Geht das auch ohne static?
und kannst du mir vllt sagen was static bedeutet und was es macht? 😀
Danke im Vorraus

Du kannst die Variablen innerhalb der main definieren, dann müssen sie nicht static sein. Static Variablen und Methoden können auch ohne eine Instanziierung der Klasse verwendet werden. Damit du hier, in einer statischen Methode, die Variablen verwenden kannst, müssen sie auch static sein. Aber auf dem Gebiet bin ich auch nicht allzu bewandert, benutz mal die Forensuche, die Frage gabs hier bestimmt schon 100x 🙂

Ich habs verstanden 😀DDDDDDD
Ich danke euch vielamals, aber allein auf sowas zu kommen könnte ich nicht 🙁
könnt ihr für mich noch i.wie eine Tipp mit auf dem Weg geben, wie ich sowas angehen soll?

Den Kopf nicht hängen lassen und es einfach weiterprobieren. Schau dir die Aufgabe erst einmal gut an und versuch sie zu verstehen. Wenn du meinst zu wissen, was am Ende dabei rauskommen soll, ist das schon einmal gut. Dann überleg dir ein Konzept, wie es mit den Vorgaben zu lösen wäre. Oder vielleicht, wenn du einen anderen Weg wüsstest, geh erst einmal über diesen. Später fällt es dir vielleicht leichter, die Aufgabe über den geforderten Weg zu lösen, wenn du zumindest schon mal einen anderen möglichen hast. Du hättest ja hier die Aufgabe erst einmal ohne Schleifen lösen können, vielleicht hättest du dann die passende Idee parat gehabt.
 
könnt ihr für mich noch i.wie eine Tipp mit auf dem Weg geben, wie ich sowas angehen soll?

Der beste Tipp (den ich unverständlicherweise noch nie von Leerkörpern gehört habe): Lerne, wie der Debugger in der IDE deiner Wahl funktioniert. Damit siehst du ganz genau, was abgeht, wo es hakt, welche Werte die Variablen haben u.s.w.

Der zweitbeste Tipp: Probiere selber rum, und habe Spaß dabei. Es gibt auch Aufgabensammlungen (z.B. projecteuler.net). Schau dir an, wie das die Profis machen. Schaue auf Frage-Antwort-Seiten wie stackoverflow.com, wenn du nicht weiterkommst.

Der drittbeste Tipp: Zerlege das Problem. Kümmere dich z.B. am Anfang nicht um Eingabedetails, sondern gib Werte vor. Zerlege den Algorithmus in verdauliche Stücke, spendiere den Stücken eigene Methoden. Teste jede Methode einzeln, bis sie tut, was sie soll.
 
Wollte mal testen wie ich am besten das exklusive Oder darstellen kann
Die Ergebnisse waren wie folgt:

Ergebnisse sollten sein(Stop)
boolstart=true;
boolend=true;
1-Stop
2-Stop
3-Start
4-Stop

Ergebnisse sollten sein(Reset)
boolstart=false;
boolend=true;
1-Reset
2-Reset
3-logischer Fehler Nr.2
4-Reset

Ergebnisse sollten sein(Start)
boolstart=true;
boolend=false;
1-Start
2-Start
3-logischer Fehler Nr.2
4-Start

Ergebnisse sollten sein(Fehler || nichts)
boolstart=false;
boolend=false;
1-logischer Fehler
2-logischer Fehler Nr.2
3-logischer Fehler Nr.2
4-Stop
Java:
package boolTest;
public class TimeChecker {
    public boolean boolend;
    public boolean boolstart;
    
    public TimeChecker() {
        //komplett korrekt gehandelt
        if(boolstart==true && boolend==true) {
            //stop
            System.out.println("1-Stop");
        }else if(boolstart==true && boolend==false) {
            //start
            System.out.println("1-Start");
        }else if(boolstart==false && boolend==true) {
            //reset
            System.out.println("1-Reset");
        }else {
            System.out.println("1-logischer Fehler");
        }
        //:::::::::::::::::::::::::::::::::::::::::::
        //komplett korrekt gehandelt
        if(boolstart ^ boolend) {
            if(boolstart) {
                //start
                System.out.println("2-Start");
            }else if(boolend){
                //reset
                System.out.println("2-Reset");
            }else {
                System.out.println("2-logischer Fehler");
            }
        }else if(boolstart && boolend){
            //stop
            System.out.println("2-Stop");
        }else {
            System.out.println("2-logischer Fehler Nr.2");
        }
        //:::::::::::::::::::::::::::::::::::::::::::::::
        //anstatt stop kommt start
        //reset wird zum logischen fehler
        //start wird zum logischen fehler 2
        //fehler aber korrekt erkannt
        if(boolstart && boolend) {
            if(boolstart) {
                //start
                System.out.println("3-Start");
            }else if(boolend){
                //reset
                System.out.println("3-Reset");
            }else {
                System.out.println("3-logischer Fehler");
            }
        }else if(boolstart && boolend){
            //stop
            System.out.println("3-Stop");
        }else {
            System.out.println("3-logischer Fehler Nr.2");
        }
        //:::::::::::::::::::::::::::::::::::::::::::::::
        //fast komplett korrekt
        //aus dem Fehler wurde Stop
        if(boolstart==boolend) {
            //stop
            System.out.println("4-Stop");
        }else if(!boolstart && boolend) {
            //reset
            System.out.println("4-Reset");
        }else if(boolstart && !boolend) {
            //start
            System.out.println("4-Start");
        }else {
            System.out.println("4-logischer Fehler");
        }
    }
    public static void main(String[] args) {
        new TimeChecker();
    }
}
 
Zuletzt bearbeitet:
leider hatte ich noch keine arrays...deshalb kann ich es so wahrscheinlich nicht schreiben. Aber trotzdem danke für deine hilfe 🙂 und bei der ausgabe hat mein prof ja hingeschrieben muss i.wo das System.out.print(booleanvariable)hin🙁
Du kannst auch einfahc die beiden forschleifen von 0 bis 1 gehen lassen, dann spielst du eben direkt mit i und j deine fälle durch 🙂
 

Zurück
Oben