2013-06-12 90 views
0

我有這樣的方法爪哇 - 不重複NIF

public static boolean DNIRepetido(String dni1){ 
     boolean aux=false; 

     for (Cliente cliente : cli) { 
      if(dni1==cliente.dni){ 
       aux=true; 
      }else{ 
       aux=false; 
       break; 
      } 
     } 
     return aux; 
    } 

但是當我實現它,它doesen't的方法工作正常

do{ 
    System.out.print("DNI: "); 
    c.dni=sc.next(); 
}while((ValidarDNI(c.dni)==false)&&(DNIRepetido(c.dni)==false)); 

( 「ValidarDNI」 正常工作)

+2

NOOOOOOOOOOO ..''==再次:_( – Maroun

回答

2

您應該通過equals()方法比較字符串。

if(dni1==cliente.dni){ 

應該是

if(dni1.equals(cliente.dni)){ 

(您可能希望以滿足在上述空引用)

==運算符使用參考平等,而equals()方法比較實際的對象(即字符數組相同 - 它們是相同的字符串)。

請注意,==將工作,如果您使用interned字符串,它直接實例化字符串是。

+0

我的夢想是,每天將通過沒有關於'任何問題==''VS的equals()' – Maroun

+0

我完全是第二 –

1

的背景還不清楚,但

if (dni1==cliente.dni) { // is the wrong way to compare two strings 

,你應該在比賽break;不能當它不

if(dni1==cliente.dni){ 
    aux=true; 
    break; // here 
} else { 
    aux=false; 
    // break; // not here 
} 

使用equals()代替(幾乎總是比較對象)

if (dni1 != null && dni1.equals(cliente.getDni())) { 
// this compares the actual text content; not the reference 

而且,我建議你讓你的成員字段私人和使用getter方法訪問他們。

2

必須使用equals方法比較字符串是否相等(相同的內容)。這是一個frequent mistake

此外,我會檢查DNIRepetido退出條件。我想你想在退出時發現重複的DNI。在你的情況,如果你發現一個重複的DNI(從而樹立aux = true)的for循環的下一次迭代將改變這一事實:

public static boolean DNIRepetido(String dni1){ 
     for (Cliente cliente : cli) { 
      if(dni1.equals(cliente.dni)){ 
       return true; 
      } 
     } 
     return false 
    } 
0

我想補充的另一個問題在你的代碼,除了equals()方法用於比較字符串。

當您進入循環時,您第一次找到具有不同DNI的客戶端時,您將退出循環,並且不會檢查其他客戶端DNI。你應該避免你的代碼的其他部分:

public static boolean DNIRepetido(String dni1){ 
     boolean aux=false; 

     for (Cliente cliente : cli) { 
      if(dni1.equals(cliente.dni)){ 
       aux=true; 
      } 
     } 
     return aux; 
    }