2013-03-24 5 views
0
long temp; 
for (int i = 0; i < size; i++) 
{ 
    temp = ls.get(i); 
    System.out.println("temp is:" + temp); 
    for (int j = 0; j < size; j++) 
    { 
      if (i == j) 
      { 

      } 
      else if (ls.get(i) == ls.get(j)) 
      { 
       // If Duplicate, do stuff... Dunno what yet. 
       System.out.println(ls.get(i)+" is the same as: " + ls.get(j)); 
       //System.out.println("Duplicate"); 
      } 

    } 
} 

我有型長的名單工作,它充滿了幾個9個數字像900876012,我檢查重複這樣我就可以產生新的號碼並在導出到文件之前替換重複項。如果說法與兩個<Long>列表【JAVA]

首先,我檢查數組中的位置是否相同,因爲顯然位置1處的東西在位置1處的相同列表中將是相同的,如果是這樣,忽略。

然後,我檢查內容是否相同,但由於某種原因它沒有被評估爲真實,它之前作爲一個普通的「if」而獨立。

僅供參考這裏的數字,只是忽略了 「溫度是」:

temp is:900876512 
temp is:765867999 
temp is:465979798 
temp is:760098908 
temp is:529086890 
temp is:765867999 
temp is:529086890 
temp is:800003243 
temp is:200900210 
temp is:200900210 
temp is:542087665 
temp is:900876512 
temp is:900876512 
temp is:900876512 
temp is:900876512 

下面是引用完整的方法:

public static void CheckContents(BufferedReader inFileStreamName, File aFile, Scanner s) throws DuplicateSerialNumberException 
{ 
    System.out.println(); 
    List<Long> ls = new ArrayList<Long>(); 
    List<String> ls2 = new ArrayList<String>(); 

long SerialNum = 0; 
int counter = 0; 
int size = 0; 
String StringBuffer; 

while (s.hasNextLine()) 
{ 
    ls.add(s.nextLong()); 
    //System.out.println(); 
    StringBuffer = s.nextLine(); 
    ls2.add(StringBuffer); 
    size = ls.size(); 
    //System.out.println(ls.size()); 
    SerialNum = ls.get(size-1); 
    //System.out.println(ls.get(size-1)); 
    System.out.println("Serial # is: " + SerialNum); 
    //System.out.println(SerialNum + ": " + StringBuffer); 
    counter++; 
} 

long temp; 
for (int i = 0; i < size; i++) 
{ 
    temp = ls.get(i); 
    System.out.println("temp is:" + temp); 
    for (int j = 0; j < size; j++) 
    { 
     if (i == j) 
     { 

     } 
     else if (ls.get(i) == ls.get(j)) 
     { 
      // If Duplicate, do stuff... Dunno what yet. 
      System.out.println(ls.get(i)+" is the same as: " + ls.get(j)); 
      //System.out.println("Duplicate"); 
     } 

    } 
} 


} 
+0

由於某些原因,當我讓ls.get(j)= temp,然後使用temp評估ls.get(i)時,這個工作正常,但不是ls.get(i)with ls.get j)...代碼現在可以工作,但很高興知道這是爲什麼... – RaenirSalazar 2013-03-24 19:21:31

+0

它被稱爲自動裝箱。在列表中,您只能存儲對象,但是當您將其分配給基元時,轉換是自動的(並且當您將基元添加到列表中時,轉換爲對象的轉換也是自動的)。 – SJuan76 2013-03-24 19:23:18

回答

1

一個漂亮的一個。

在列表中,您不存儲float(原始)但是Float對象。 Autoboxing讓你對你透明。

==比較器不適用於對象(它告訴兩個對象是否相同,但如果有兩個對象保持相同的值,則返回false)。

您可以使用

if (ls.get(j).equals(ls.get(i)) 

或(因爲它是List<Long>

if (ls.get(j).longValue() == ls.get(i).longValue()) 

甚至(多虧了自動裝箱)

if (ls.get(j).longValue() == ls.get(i)) 
0

請嘗試

else if (ls.get(i) != null && ls.get(i).equals(ls.get(j))) 

而不是

+0

哇,我應該意識到它存儲爲一個對象,而不是一個原始的,不知道哪一個標記爲正確的,因爲兩者都有幫助:D – RaenirSalazar 2013-03-24 20:08:24

+0

SJuan的答案更完整,所以你已經很好地接受了他的一個 – 2013-03-24 20:10:29