Operatoren If mit Oder

astradslme

Mitglied
Hallo Leute ich habe folgendes Problem:

Java:
if (!E.equals("Umfang") | !E.equals("Fläche"))
			{
			System.out.println("Sie müssen Fläche oder Umfang eingeben!");
			}

Leider gibt er mir immer die Ausgabe aus, auch wenn ich "Umfang" oder "Fläche" eingebe.

Die Ausgabe soll aber nur kommen wenn eben nicht "Umfang" oder "Fläche".

Mit freundlichem Dank,

astradslme
 

Clayn

Aktives Mitglied
Er geht ja in dein If Konstrukt rein wenn du nicht "Umfang" oder nicht "Fläche" hast.
Wenn du nun Umfang eingibst ist das ja nicht Fläche und somit true. Also geht er beim oder in den if-block.

Ich denke du brauchst eher und (&). Dann geht er rein wenn du nicht Umfang und nicht Fläche hast.
Und wenn du eins von beidem hast, dann geht er nicht rein

MFG
Clayn
 

Flown

Administrator
Mitarbeiter
Du hast den Satz von deMorgan falsch angewendet denn:

!( x | y) <=> !x & !y

d.h.:

entweder du schreibst:

Java:
!E.equals("Umfang") && !E.equals("Fläche")

oder:

Java:
!(E.equals("Umfang") || E.equals("Fläche"))
 

astradslme

Mitglied
Hallo Leute, super Forum.

also anstatt || habe nun die && eingefügt und wunder es funktioniert, vielen Dank.

Aber ich kenn das & aus der digitalen Technik eigentlich so: Es wird nur durchgeschalten, wenn beides eintrifft, also wenn Umfang & Fläche eingegeben wird?

Warum funktioniert es mit "&" und "&&" ?
 

VfL_Freak

Top Contributor
Moin,

also anstatt || habe nun die && eingefügt und wunder es funktioniert, vielen Dank.

Aber ich kenn das & aus der digitalen Technik eigentlich so: Es wird nur durchgeschalten, wenn beides eintrifft, also wenn Umfang & Fläche eingegeben wird?

Warum funktioniert es mit "&" und "&&" ?
Also, erstens steht im ersten Post nicht "||", sondern nur "|" - und das ist nun mal was ganz anderes (analog bei "&" und "&&") !!
Dies sind jeweils unterschiedliche Operatoren (siehe hierzu auch den Post von Flown) !!

Zweitens: was genau möchtest Du denn nun prüfen?
Meine Vermutung: "E ist nicht Umfang" ODER "E ist nicht Fläche".
Erkläre es mal umgangssprachlich!

Gruß
Klaus
 

parabool

Bekanntes Mitglied
"|" und "||" sind so unterschiedlich nicht.
Nur dass bei "||", wenn der 1.Ausdruck wahr ist, der 2. Ausdruck nicht mehr ausgewertet wird (spart unter Umständen Zeit).

Analog auch bei "& und "&&" (dort wenn der 1.Ausdruck nicht wahr ist)
 

parabool

Bekanntes Mitglied
Ist kontextabhängig:

Java:
public class Test {

	public static void main(String[] args) {	
		System.out.println(isGerade(4) | isGerade(5));
		System.out.println(isGerade(4) || isGerade(5));	
		System.out.println(isGerade(5) || isGerade(4));		
		System.out.println(4|5); //bitweises ODER ergibt 5
	}
	private static boolean isGerade(int zahl)
	{	
		System.out.print("berechne("+zahl+") ");
		return zahl%2==0;
	}
	
}

Bei einen Test z.B isPrim würde ich || bevorzugen ;)


[edit]
im besagtem Link steht es schon korrekt ;)
[/edit]
 
Zuletzt bearbeitet:

Pentalon

Bekanntes Mitglied
Java:
if (!E.equals("Umfang") | !E.equals("Fläche"))

Ich glaube dass hier einfach das kleine aber feine NOT für die Verwirrung sorgt.

Die Abfrage lautet im konkreten Fall:
wenn NICHT E.equals("Umfang") oder NICHT E.equals("Fläche")
und damit trifft die Bedingung auch zu wenn einer der beiden Fälle gegeben ist.

Korrekt müsste es heissen:
wenn NICHT E.equals("Umfang") UND NICHT E.equals("Fläche")
Damit tritt die Bedingung nur dann ein, wenn es weder das eine noch das andere ist.

Java:
if (!E.equals("Umfang") && !E.equals("Fläche"))

Das NOT (das Rufzeichen) vor den beiden equals kehrt die Antwort auf die Frage nach der Gleichheit um.
In der ELektronik ist der der Strich über dem Namen des Signals.

Pentalon
 
Zuletzt bearbeitet:

Neue Themen


Oben