if . else ?

Status
Nicht offen für weitere Antworten.

ghost

Bekanntes Mitglied
Ich hab untenstehenden Teil programmiert. Mit dem Teil soll geprüft werden ob eine DB - Verbindung besteht und falls ja, soll diese beendet werden. Wenn keine Verbindung besteht soll ein Text ausgegeben werden. Mein Problem ist nun, das wenn die Verbindung beendet wurde und ich nochmal aufs Beenden gehe genau der Text vom normalen beenden kommt und nicht der, das keine Verbindung besteht. Wieso?
Code:
ActionListener AL3 = new ActionListener(){
			public void actionPerformed(ActionEvent e){
			Text("Verbindung wird beendet");
			
			//try{
				if (test = true){
					try{
					Verbindung.conn.close();
					Text("Verbindung beendet");
					test = false;
					}
					catch (SQLException exc){
					Text("Fehler beim Beenden" + exc);}
					}
				else{
				Text("Keine geöffnetten Verbindungen!");
				}
 

ghost

Bekanntes Mitglied
Wieso ist das unnötig? Meinst du weil sonst ( wenn keine Connection besteht ) sowieso die Exception kommt?
 

Sky

Top Contributor
ghost hat gesagt.:
Code:
if (test = true){
// ...
}

Bei dieser Code-Zeile handelt es sich um eine Zuweisung. Du sagt also "test ist gleich true!" und fragst dann mittels 'if': "Ist denn test gleich true?". Das bekommst Du natürlich immer ein 'ja' zurück.

Code:
test = true // Zuweisung
test == true // Vergleich

Wie aber Roar schon geschrieben hat, sollte man beim boolean-Vergleich die folgende Variante wählen (es ist einfach lesbarer...):
Code:
if (test) {
//...
}
 

Bleiglanz

Gesperrter Benutzer
Deshalb:

bei Vergleichen mit einem konstanten Term IMMER den konstanten Term LINKS hinschreiben

Code:
if(true==test)
geht
Code:
if(true=test)
geht nicht
 

mic_checker

Top Contributor
was hat das damit zu tun? Ist doch klar das

Code:
if(true=test)

nicht funktioniert, aus bereits erklärten Gründen (da es eine Zuweisung und kein Vergleich ist).

Ob du schreibst

Code:
if(test == true)

Oder

Code:
if(true == test)

ist doch gehoppt wie gesprungen oder nicht? Kommt natürlich drauf an was man selbst bevorzugt....
 

Sky

Top Contributor
mic_checker hat gesagt.:
Code:
if(true == test)

ist doch gehoppt wie gesprungen oder nicht? Kommt natürlich drauf an was man selbst bevorzugt....

Diese Version hat den Vorteil, dass der Compiler meckert, wenn man versehentlich anstatt '==' nur ein '=' schreibt, da man 'true' zum Glück mal nix zuweisen darf.
 

mic_checker

Top Contributor
Ok, seh ich ein....nur sein Beispiel erschien mir wenig sinnvoll, aus genannten Gründen.

Egal, ich verwechsele '==' und '=' ja nicht ;)
 

SebiB90

Top Contributor
Hobbit_Im_Blutrausch hat gesagt.:
Ich schreibe jedenfalls immer

Code:
if (test == true)
warum macht ihr das so lang
so is doch einfacher
Code:
if(test) {
//..
}
und fertig
 

The_S

Top Contributor
Ich find das

Code:
if (test == true)

den Code übersichtlicher macht
 

meez

Top Contributor
Code:
if (test == true)

Ist einfach nicht sehr perfomant, da man zwei Vergleiche macht...
 

The_S

Top Contributor
meez hat gesagt.:
Code:
if (test == true)

Ist einfach nicht sehr perfomant, da man zwei Vergleiche macht...

Könnte auch sein, dass ich als Frischling in Sachen programmieren mich (noch) nicht damit abfinden will, etwas "ohne" Wert zu schreiben! Ich schreib ja auch statt

Code:
String str = null

Code:
String str = ""

:bae:
 

thE_29

Top Contributor
String str = "" = Objekt wurde mit "" initialisiert => man kann drauf zugreifen!

String str = null = objekt ist noch null, greift man darauf zu => Nullpointerexception
 

The_S

Top Contributor
Hätte vielleicht noch hinzufügen sollen, dass ich dem String dann später noch einen anderen Wert zuweise, bevor es zu einer NullPointerException kommt. :wink:
 

DesertFox

Bekanntes Mitglied
Hobbit_Im_Blutrausch hat gesagt.:
Ich find das

Code:
if (test == true)

den Code übersichtlicher macht
man gewöhnt sich dran, wenn man das nur no0ch so macht, dann liest man irgentwann das wie test == true
 

Campino

Top Contributor
mal ganz kurz:

sollte
Code:
if(test=true)...
nicht einen Compilerfehler erzeugen?
Weil eine Zuweisung als if-Bedinung nicht zulässig ist?
 

mic_checker

Top Contributor
Campino: Wofür hat man den guten Compiler? Schnell eingetippt und das wärs gewesen...

In der Klammer steht ein Ausdruck, in diesem Ausdruck wird der Variablen der Wert "true" zugewiesen, somit ist der ganze Ausdruck wahr....ohne murren des compilers.
 

thE_29

Top Contributor
Es geht ja auch das (ich verwende das oft, wenn ich mehrere Zuweisungen in einer Zeile brauche!)

Code:
    for(int x = 0, y = 1; x != getNotRunningServicesCount(); y++)
      strRet[x] = !isServiceRunning(y) ? ((++x == x) ? getServiceName(y) : null) : null;

Und es funktioniert :)
 

Sky

Top Contributor
Campino hat gesagt.:
mal ganz kurz:

sollte
Code:
if(test=true)...
nicht einen Compilerfehler erzeugen?
Weil eine Zuweisung als if-Bedinung nicht zulässig ist?

Genau aus diesem Grund sollte man sich angewöhnen, den konstanten Term links zu schreiben.

Wenn Du nämlich mal dies hier

Code:
if(true=test)...

versehentlich mit dem hier verwechselst:

Code:
if(true==test)...

ja dann meckert auch dein Compiler.
 

thE_29

Top Contributor
Oder man sollte sich angewöhnen "schön" zu programmieren!

Sprich, immer Leerzeichen zwischen Operatorn

Code:
if(test == true && x == 12 || test == false)


Dann passiert sowas net so leicht, bzw dann sieht man es besser!
 

Illuvatar

Top Contributor
thE_29 hat gesagt.:
Es geht ja auch das (ich verwende das oft, wenn ich mehrere Zuweisungen in einer Zeile brauche!)

Code:
    for(int x = 0, y = 1; x != getNotRunningServicesCount(); y++)
      strRet[x] = !isServiceRunning(y) ? ((++x == x) ? getServiceName(y) : null) : null;

Und es funktioniert :)

Btw: ++x == x? Also, wenn das je true sein sollte, fresse ich meinen PC.
 

Illuvatar

Top Contributor
Grml, hast du Salz da? Der Prozessor schmeckt sonst so fade. (Aber das heißt ja auch bloß, dass es nie false wird, oder?)
 
B

Beni

Gast
Ich könnte Traubensaft bieten :bae:, und ja, false wird das Ding nie (oder ich fress meinen PC).
 

thE_29

Top Contributor
@Illu: wir haben 2 wochen lange in der Schule ifs und den ternären Operator "studiert" ich weiß dass das geht und warum das so geht ;)


Das beste ist sogar, dass er beim 1. Durchlauf auch ins 0te reinschreibt :)

Und ja es geht, weil ++x == x = true
wohingegegen
x++ == x = false ist ;)

Weißt du den den Unterschied zwischen ++x und x++ ?? ;)


@Illu, die Zeile hat schon einen Sinn ;)


Das ++x == x ist nur deswegen da, das x erhöht wird, aber ein String zurückgegeben wird :)

Sowas baue ich gerne ein, damit ich andere Leute verwirre und keiner meinen Code so schnell abändern kann :D


Nachtrag: zB wenn man so ein if hat

if(str != null && !str.equals("") && ....)

Geht das ja auch wunderbar, da der Interpreter/Compiler her geht und nachschaut, ist der erste Eintrag efühlt?

Wenn ja, weiter (da &&) wenn nein, aus da die Bedingung nie erfühlt werden kann!

Das gleiche beim ||

if(x == 3 || x > 2)

Wenn x 3 ist, überprüft er den nächsten Term gar nicht, da ja schon eine Bedingung erühlt worden ist, und beim Oder braucht man ja nur eine 1 (true) haben :)
 

Illuvatar

Top Contributor
Jaja dass mit dem immer true und immer false war nur nen Denkfehler, aber den Sinn des ++x == x ? usw. erschließe ich erst jetzt ;)

the hat gesagt.:
if(str != null && !str.equals("") && ....)
Ja sowas mach ich auch immer ;)

PS: Ich glaube über ++i und i++ hab ich hier schon genug oft was gepostet, um den Unterschied zu kennen ;)
 
B

bygones

Gast
und wenn wir schon dabei sind...
Code:
if("".equals(whatEver))
statt
Code:
if(whatEver.equals(""))
wobei ich die length auch bevorziehe
 

Sky

Top Contributor
deathbyaclown hat gesagt.:
und wenn wir schon dabei sind...
Code:
if("".equals(whatEver))
statt
Code:
if(whatEver.equals(""))
wobei ich die length auch bevorziehe

Naja, die Abfrage nach der Länge kann aber im Gegensatz zu deinem 1. Bespiel zu einer NullPointerException führen; d.h. man muss entweder nen zusätzlichen try-catch machen oder sich sehr sicher sein, dass das Ding niemal im Leben null sein kann...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
M Variablen If - Else Wiederholungsfehler Allgemeine Java-Themen 3
L Vererbung If-Else ersetzen durch was? Allgemeine Java-Themen 20
O Darstellung von else if anweisung im struktogramm? Allgemeine Java-Themen 1
R Wie schaffe ich es, dass java zB 100 zählt ohne ständig "else if" hinschreiben zu müssen? Allgemeine Java-Themen 7
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
K Eclipse Alternativkonstrukte (Verzweigungen: if, switch,else..) Allgemeine Java-Themen 4
D if - else Baum vereinfachen Allgemeine Java-Themen 4
S Else-Anweisung Problem Allgemeine Java-Themen 17
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
M if - else Abfrage beenden Allgemeine Java-Themen 4
M if, else, etc. als Membervariablen? Allgemeine Java-Themen 14
P if(a) else if (b) else if (c) . Frage Allgemeine Java-Themen 2
G die mittlere von 5 Zahlen nur mit if und else finden Allgemeine Java-Themen 48
U Kompilieren einer großen Datei if-else = StackOverflowError Allgemeine Java-Themen 4
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
G switch case VS. if.else if Allgemeine Java-Themen 2
H if - else if-else bessere Lösung gesucht Allgemeine Java-Themen 4
H If anweisungen zu verschachtelt? else without if Allgemeine Java-Themen 8
D Performancefrage zu "else if" und "||" Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben