Illégale Début de l'Expression Java Booléen?
Je suis en train de lancer un bit à Bit de comparaison de numéro et mon code ne cesse de revenir avec un Illégales début de l'expression à la ligne 30 de mon code avec l'instruction "if".
Mon code se lit comme suit:
public class Project7 {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
double P = keyboard.nextDouble();
double Q = keyboard.nextDouble();
double R = keyboard.nextDouble();
double S = keyboard.nextDouble();
boolean First_Relation;
boolean Second_Relation;
if (P > Q) First_Relation = true;
if (R < S) Second_Relation = true;
if (First_Relation = true) & (Second_Relation = true);
System.out.println("Given the values for p,q,r, and s the expression "
+ "(p > q) && !(r < s) evaluates to " );
}
}
First_Relation = true
devrait être First_Relation == true
dans if
Pourquoi les gens sont à droit de vote de la question vers le bas? Il pose la question aussi clairement que le demandeur est en mesure, et témoigne de l'effort. Pas chaque question sur des sujets avancés ou cible avancée des codeurs.
Tu veux dire, le troisième si la déclaration?
La question n'est pas demonstarte effort sur ce qu'il a essayer de résoudre le
syntactical error
, c'est pourquoi.
OriginalL'auteur Tanner Banks | 2013-09-27
Vous devez vous connecter pour publier un commentaire.
Un
if
déclaration est de la forme:Vous avez actuellement obtenu deux entre crochets conditions... qui finissent aussi par attribution valeurs, qui n'est probablement pas ce que vous voulez.
Donc d'abord fixer à le faire pour compiler:
Puis modifier les affectations à des vérifications d'égalité, sinon il sera tout simplement attribuer
true
à la fois des variables et la condition se passer indépendamment de leurs valeurs précédentes:Puis retirez les comparaisons avec les constantes booléennes:
Puis supprimer les parenthèses:
Puis faire les variables de suivre les conventions de nommage Java:
Puis utilisez le plus classique de l'
&&
au lieu de&
-&&
est de court-circuit, et est presque toujours ce que vous voulez:Maintenant, vous avez encore un point-virgule directement après votre
if
condition, ce qui rend inutile - il toujours exécuter leSystem.out.println
déclaration, parce que cela ne fait pas partie de laif
déclaration. Vous pourrait juste enlever le point-virgule, mais je voudrais ajouter des accolades pour plus de clarté:Ensuite, notez que vous n'êtes en fait l'initialisation des variables si la condition est vraie, vous pouvez actuellement obtenir une erreur de compilation pour essayer de lire les variables qui ne sont pas définitivement attribué.
D'abord, de fixer l'affectation définitive:
... et le code ci-dessus doit être fine.
Prochain, à l'endroit qui vous êtes vraiment gagner très peu, en effet, à partir de ces variables supplémentaires. Inline les conditions à la place:
À ce stade, il devient très clair qu'il y a un autre bug parce que votre message parle de
!(r < s)
mais la condition est juster < s
. Donc vous devez décider ce que vous voulez réaliser, et rendre le code et le message reflètent la même chose. Notez que vous n'avez pas fini le message, soit. En effet, vous pouvez simplifier le tout à:... ou ce que vous voulez l'expression pour être réellement.
Belle réponse! Je voudrais aussi inline tant à l'égard des expressions comme ils le font d'améliorer la lisibilité: si (P > Q && R < S) ...
Vrai, le mentionner.
Ouch, il y avait aussi un réel problème affectation, et le message a été mal. Aïe.
"Donc vous devez décider ce que vous voulez réaliser, et rendre le code ... reflètent la même chose." Le chemin du bonheur se trouve de cette façon.
OriginalL'auteur Jon Skeet
Autant que je sache, vous ne pouvez pas utiliser la
&
opérateur en Java pour effectuer une au niveau du bit comparaison entre double. Il ne peut être utilisé avec d'autres plus simples primitives, comme les services de renseignements et de caractères.En outre, la façon dont vous utilisez le
&
opérateur ne sera pas effectuer une comparaison bit à bit entre les nombres, parce que vous utilisez afin de comparer les résultats deP>Q
etR<S
, lesquelles produisent des valeurs booléennes.Pour effectuer une comparaison bit à bit entre des chambres doubles, vous devez utiliser une technique différente de comparer directement les P avec Q et R avec S. Voici un exemple d'une façon de le faire: https://stackoverflow.com/a/13928322/213343.
Pas dans le code. Sa question: "je suis en train de lancer un bit à Bit de comparaison de numéro...". Ma réponse explique pourquoi son code n'est pas l'accomplissement de cet objectif. De Plus, cela correspond à l'utilisation incorrecte de l' & opérateur, qui est de l'or au niveau du bit ET de l'opérateur.
OriginalL'auteur shovavnik
et le Moyen Efficace est
envisager de ma mise à jour de réponse
Bien maintenant que compile, mais vous n'avez pas expliqué quelque chose au sujet de pourquoi vous avez changé
&
à&&
ou=
à==
.OriginalL'auteur Ashok
Essayer de prendre
en tranches.
Et enlever le ";" à partir de la fin de l'instruction "if", parce qu'il n'a pas de sens : ", " est considérée comme une nouvelle fin d'instruction (instruction vide dans votre cas) et que vous navez pas le champ d'application pour l'instruction "if" - il ne fonctionne que pour la prochaine proclamation savoir instruction vide.
OriginalL'auteur oleg.lukyrych
Si la condition n'est pas remplie, alors il n'y a pas de message. Je suggère donc:
OriginalL'auteur Lluis Martinez