Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Dann kommt die Fehlermeldung, daß bei if (nst = 0) Boolean verlangt wird. Im anderen Programmiersprachen können selbstverständlich auch float und double Zahlen über if(bla bla) bearbeitet werden. Wie darf ich denn nun obigen Konflikt lösen? Eine int Variable erstellen und dann den double-Wert von nst an die neue int-Variable überstellen zu wollen, geht natürlich auch nicht. Oder gibt es eine Möglichkeit, daß eben auch mit Java NICHT immer Boolean in if und while usw. verlangt wird? Danke.
Anmerkung: andere Datentypen als einen boolean in ein if zu stecken ist Schwachsinn, auch wenn das mehrere Sprachen erlauben. Du sagst ja auch nicht "Wenn es 3.141 dann gehe ich spazieren, an sonsten sehe ich fern, es sei denn Apfel."
Mir fällt da spontan ein Beispiel ein. Du willst eine Usereingabe erzwingen, und wenn der User den String "Hallo Bot." eingibt möchtest du dass "Hallo User." zurückgegeben wird. Dementsprechend vergleiche ich hier in meiner if-Abfrage den String von der Usereingabe, und schaue ob er irgendwo übereinstimmt.
Wie kommst du auf die Idee, nie was anderes außer true/false in ne if-Abfrage zu packen?
Das ist richtig, aber es werden trotzdem zwei Strings reingesteckt - Die Auswertung ist dann vom Typ Boolean, aber nicht die Ausdrücke, welche reingesteckt werden.
Oder?
Tobse schrieb ja:
andere Datentypen als einen boolean in ein if zu stecken ist Schwachsinn
fLooojava@
Ich denke, er meint damit Ausdrücke, welche sich zu einem boolean auswerten lassen. Kann jemand eine Sprache und konkretes Beispiel dafür nennen? In C habe ich mal von so etwas gehört: if(referenz)... Wenn die referenz != null ist, wird die Bedingung als "true" gewertet. Außer der ersparrten Schreibarbeit finde ich nun aber nicht wirklich einen Unterschied. Und ich finde die in Java verwendete Syntax um einiges leichter zu lesen..
In JavaScript kann man sowas z.B. machen. if(object) funktioniert _glaube_ ich auch in PHP.
Code:
if(object){
//Prüfung,ob das Objekt auf null zeigt
}
if(object.property){
//Prüfung, ob das Feld existiert
}
if(object.method){
//Prüfung, ob die Methode existiert
}
In JavaScript kann man sowas z.B. machen. if(object) funktioniert _glaube_ ich auch in PHP.
Code:
if(object){
//Prüfung,ob das Objekt auf null zeigt
}
if(object.property){
//Prüfung, ob das Feld existiert
}
if(object.method){
//Prüfung, ob die Methode existiert
}
Das ist richtig, aber es werden trotzdem zwei Strings reingesteckt - Die Auswertung ist dann vom Typ Boolean, aber nicht die Ausdrücke, welche reingesteckt werden.
String input = ... ;
if ("Hallo Bot".equals(input))
{
// do Sth.
}
Dann geht aber kein String (und schon garkeine Zwei) in das If, sondern ein Boolean. Denn "Hallo Bot".equals(input) evauliert zu einem Boolean. Folgender code ist korrekt:
Najaaa... "Hallo Bot." ist ein String und input repräsentiert ebenfalls ein String und grundsätzlich werden zwei Strings miteinander verglichen. Das ist Fakt.
Ich denke darüber kann man sich streiten, aber die Auswertung ist wie du sagtest ein boolean. Sprich der Ausdruck in der if-Anweisung nach der Auswertung ist vom Typ her ein boolean.
Najaaa... "Hallo Bot." ist ein String und input repräsentiert ebenfalls ein String und grundsätzlich werden zwei Strings miteinander verglichen. Das ist Fakt.
Ich denke darüber kann man sich streiten, aber die Auswertung ist wie du sagtest ein boolean. Sprich der Ausdruck in der if-Anweisung nach der Auswertung ist vom Typ her ein boolean.
dann haben wir uns da missverstanden. Natürlich macht es Sinn, zwei Strings in einem If zu vergleichen, ganz gemäß der Aussprache: Wenn die Eingabe gleich "Hello Bot" ist. Aber Wenn Baum dann gehe 3 Schritte ist nich teindeutig und finde ich verwirrend.
Darüber lässt sich definitiv streiten. In Python bspw. kannst du jedes Objekt als Bedingung verwenden. Wenn das Objekt die Methode "__nonzero__" (in Python 3 heißt sie "__bool__") definiert, wird diese aufgerufen. Dessen Rückgabe muss dann ein boolean-Wert sein. Ich glaube alle Standarddatentypen haben sie definiert. So ist die Zahl 0, ein leerer String, eine leere Liste oder ein leeres Dictionary, alles false.
Ich gehe mit dir konform, dass das in Java eher nicht angebracht wäre, da sie streng typpisiert ist. Aber gerade in Scriptsprachen, finde ich, ist diese Schreibweise oft eleganter und auch übersichtlicher. Solange die "Regeln" halbwegs logisch definiert sind.