2017-04-17 66 views
-5

我用平等,讓我先在這裏添加的代碼遇到一個問題:Java的平等纏着我

Operateur o = new Operateur(nom, age, sexe, grade, role); 
for(Operateur op : Membre.getOperateurs()){ 
    if(o.equals((Object)op)){ 
    already_exists = true; 
    break; 
    } 
} 

if(already_exists){ 
    ret = ">Can't create it : already exists"; 
    Membre.removeLast(); 
    o.finalize(); 
}else{ 
    ret = ">Created it"; 
} 

在這裏,我檢查是否有新Operateur不僅僅是一箇舊的副本(Membre.getOperateurs讓我Membre的所有實例列表,其實際爲Operateur)。

我的問題是,當我運行這段代碼,如果我的Operateur是全新的顯示爲已存在的(他應該不會,因爲他是全新的)。

例如,當我創建第一個Operateur有史以來它評估它作爲一個已有的副本。

由於:

import cmd.*; 
import matrice.*; 
import persona.*; 
import non_grata.non.*; 
import non_grata.grata.*; 
//all above is importing packages to use all classes required 


public class Debug{ 
    public static void out(String s){ 
    System.out.println(s); 
    }//handy 

    public static void main(String[] args){ 
    Membre.init();//Membre.membre = new ArrayList<Membre>(); 
    Personnel.init();//Personnel.membre = new ArrayList<Membre>(); 
    Vaisseau.init();//Vaisseau.vaisseaux = new ArrayList<Vaisseau>(); 
    MatrixCmd cmd = new MatrixCmd();//Create the command parser 

    String parser_input = "afficherMembres";//get some input 
    String parser_output = cmd.execCommand(parser_input);//process it 
    out(parser_output);//use it 
    //empty list, correct since we only initialized it 

    parser_input = "newOPsion mikebike 10 o string string"; 
    parser_output = cmd.execCommand(parser_input); 
    out(parser_output); 
    //outputs ">Impossible de créer cet Opérateur : Il existe déjà" which it shouldn't 
    //since there are no other Operateur and this is only 
    //given as output when it founds a similar Operateur 

    parser_input = "afficherMembres"; 
    parser_output = cmd.execCommand(parser_input); 
    out(parser_output); 
    //outputs an empty list, meaning that there are no Membre created 
    //and therefore no Operateur 

    parser_input = "newOPsion mikebke 8 f tring sring";//command that will trigger the bit of code above 
    parser_output = cmd.execCommand(parser_input); 
    out(parser_output); 
    //outputs">Impossible de créer cet Opérateur : Il existe déjà" which it shouldn't 
    } 
} 
+0

哦,surpise!當有人喊出「可能重複」的問題時,會自動將其標記爲重複,無論它是否爲真。我知道,因爲,哦,驚喜,改變每一個'=='的'.equals('在字符串比較並沒有改變一個東西\ o /。GJ @OliverCharlesworth – Vivick

+0

@MadProgrammer:它不是重複的(見上) – Vivick

+2

我很抱歉Vivick,但即使它不是重複的,問題質量也有點低,首先標題很糟糕 - 你指責Java是因爲你的問題,而不是理解不完全;其次,你給了一個很大的代碼轉儲而不是創建一個[MCVE];第三,你沒有提供理解'==''equals'之間差異的證據,如果你要求免費幫助,請花一些時間編輯你的問題代碼爲你正在努力實現的目標,迄今爲止的研究,以及當你調試它時會發生什麼 –

回答

1

變化return super.equals((Object)o) && this.role==o.role;Object.equals測試參考身份(你知道Object s爲唯一實例)。此外,不要使用==來比較參考類型(如String)。我認爲你想

return this.role.equals(o.role); 
+0

這個解決方案並沒有改變一件事 – Vivick