Je ne comprends pas ce b*rdel

Résolu/Fermé
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018 - Modifié par baladur13 le 15/11/2016 à 19:09
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 15 nov. 2016 à 19:05
Bonjour,
J'ai un petit problème assez énervant et stupide...
Je fais une petite calculatrice en Java, faisant les + et les -.
J'ai fais une condition pour faire l'opération demandés, mais quand je fais un +, ça fait un - et quand je demande un - ça me fait un -...
Regardez le code, vous comprendrez mieux:
package me.fr.killuaah;

import java.util.Scanner;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
   System.out.println("----------Calculator v1 by Killuaah----------");
    System.out.println("Please enter a number");
    //Début du get du n1
    long n1;
    Scanner num1 = new Scanner(System.in);
   n1 = num1.nextLong();
   //Fin du get du n1 
   System.out.println("Please enter a second number");
    
   //Début du get du n2
   long n2;
   Scanner num2 = new Scanner(System.in);
   n2= num2.nextLong();
   //Fin du get du n2
   System.out.println("Please enter + or -");
   
   //Début du get de l'opération
   String op;
   Scanner ope = new Scanner(System.in);
   op = ope.nextLine();
   //Fin du get de l'opération 
   
   //+
   if (op == "+")
   {
   long result = n1 + n2;
   System.out.print(+ n1);
   System.out.print("+");
   System.out.print(+ n2);
   System.out.print("=");
   System.out.print(+result);
   
   }
   //Fin +
   
    
   else if (op == "-");

   {
    long result = n1 - n2;
    System.out.print(+ n1);
    System.out.print("-");
    System.out.print(+n2);
    System.out.print("=");
    System.out.print(+ result);
    result = 0;
   }
   return;
 
 
 
 
 }

}


Comment je suis censé régler ce problème ?

Bonne journée
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 nov. 2016 à 18:49
Bonjour,

if (op == "+")
est faux car il ne faut jamais comparer deux objets avec == qui fait une comparaison des références d'objets, pas de leur valeur, ça c'est le rôle de la méthode equals :
if(op.equals("+"))
, idem pour
if (op == "-");
auquel tu devras en plus enlever le
;
qui n'a rien à faire là.
1
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018
15 nov. 2016 à 18:53
Ah ça je ne savais pas ^^
Pour moi, par logique, je pensais que pour les variables et les objets c'était la même chose, mais aparement non xD
Bon bah merci :D
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 nov. 2016 à 19:05
Les variables c'est le nom que tu donnes dans ton code, mais à l'exécution ça n'a aucune valeur. Ce que tu manipules vraiment ce sont soit des types primitifs soit des références (des entiers concrètement) qui pointent vers un espace mémoire où est stocké l'objet.
Si tu compares deux références avec == tu vas juste comparer l'entier de l'adresse mémoire, alors que ce que tu veux toi, c'est savoir si les valeurs qui sont dans l'objet sont similaires, même si ce n'est pas physiquement le même objet.
Concrètement pour deux String, on va devoir comparer un par un chacun des caractères avant de savoir s'ils sont égaux. Voilà comment c'est fait en vrai :

public final class String {
    private final char value[];
// ...
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
// ...
}
0