2014-09-22 132 views
-2

我對Java編程非常新穎,我想創建一個將從文件中打印出一些值的程序。我想從包含大量重複數字的文件中導入數組列表。該程序應該只打印出一組唯一的數字。從數組列表中提取唯一值

例如,數組包含這些數字:

0,0,0,0,2,2,2,2,2,3,3,3,3,3,5,5,5,5,8,8,10,10,2,2,2,3,3,7,7

什麼,我應該把它弄出來是這樣的:

0,2,3,5,8,10,2,3,7 

同樣將需要如果陣列WASN」 t包含整數,但浮點數:

0.23, 0.23, 0.23, 0.23, 1.89, 1.89, 1.89, 1.89, 1.89, 2.56, 2.56, 2.56, 2.56, 2.56, 3.13, 3.13

輸出應該是:

0.23, 1.89, 2.56, 3.13

有沒有人一些建議,我應該如何構建循環?

在此先感謝

+2

你有什麼試過自己?你能給我們一些你已經嘗試過的示例代碼嗎? – 2014-09-22 00:42:29

+0

[重複數組中的元素比較]可能的重複(http://stackoverflow.com/questions/1011344/compare-elements-in-an-array-for-duplicates) – 2014-09-22 14:03:29

回答

1

代碼

int[] input = new int[]{0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5, 5, 8, 8, 10, 10, 2, 2, 2, 3, 3, 7, 7}; 
    int current = input[0]; 
    boolean found = false; 

    for (int i = 1; i < input.length; i++) { 
     if (current == input[i] && !found) { 
      found = true; 
     } else if (current != input[i]) { 
      System.out.print(" " + current); 
      current = input[i]; 
      found = false; 
     } 
    } 
    System.out.print(" " + current); 

輸出

0 2 3 5 8 10 2 3 

說明

之後你設定的電流與數組的第一個值,你通過 去loop.Inside循環,如果相等元素 和標誌源泉當前值爲false這意味着複製一直沒有看到,你現在已經看到了 ,所以發現變量的標誌已經被設置爲true,這表明已經找到了重複或者看到了一個do 什麼都沒有。

對於其他部分,如果數組的元素不等於當前的 變量意味着沒有重複,並且右邊的當前變量 包含之前在控制檯上看到的副本。更新 可變電流與新的複製和設置標誌發現錯誤哪些 顯示沒有看到新的看到重複。繼續這樣做,直到完成遍歷循環後,重複變量 。

+0

比你非常!我非常感謝你的解釋。我必須編輯問題以獲取更多信息。如果數據包含浮點數而不是整數,您會改變什麼? – 2014-09-22 01:11:29

+0

的過程是一樣的。只需要將數組的類型更改爲double並將當前變量加倍即可:) – 2014-09-22 01:12:54

+0

@IvnBubrov它怎麼樣? – 2014-09-22 01:27:24

1

好像要防止非連續重複。我首先將一個變量設置爲數組中的第一個值,輸出該值,然後迭代該數組,直到遇到新的唯一值。我會輸出一個逗號和新值(將其存儲在值變量中),然後繼續循環(直到我到達數組的末尾)。也就是說,像 -

public static void main(String[] args) { 
    int[] arr = { 0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5, 5, 8, 
      8, 10, 10, 2, 2, 2, 3, 3, 7, 7 }; 
    int v = arr[0]; 
    System.out.print(v); 
    for (int i = 1; i < arr.length; i++) { 
     if (arr[i] != v) { 
      v = arr[i]; 
      System.out.printf(", %d", v); 
     } 
    } 
    System.out.println(); 
} 

輸出是請求

0, 2, 3, 5, 8, 10, 2, 3, 7 
+0

正是這樣!但是,如何修改int [] arr = {}部分以輸入文本文件中的數字列表,而不必知道它的長度? – 2014-09-22 00:48:50

+0

@IvnBubrov三個選項。 1.使用'ArrayList '動態獲取它,或者2.使用兩遍並計算第一遍中元素的數量,或者3.在文件中存儲元素的數量。 – 2014-09-22 00:50:36

+0

非常感謝!我會盡力以三種方式完成它。 – 2014-09-22 00:52:16

0

最簡單的解決方案是創建臨時LinkedHashSet並將所有值放在那裏。

import java.util.Arrays; 
import java.util.LinkedHashSet; 
import java.util.Set; 

...

public static void main(String[] args) { 
    Set<Integer> temp = new LinkedHashSet<Integer>(Arrays.asList(0, 0, 0, 0, 2, 2, 2, 2, 2, 
     3, 3, 3, 3, 3, 5, 5, 5, 5, 8, 8, 10, 10, 2, 2, 2, 3, 3, 7, 7)); 
    System.out.print(temp); 
} 

請注意,數字 「2」 應該是在列表中只有一次。請更正您的問題示例。

+1

我不知道我可以在這裏使用集合,因爲需要一段時間後重復的數字,所以2被正確寫入,並且輸出應該是:0,2,3,5,8,10,2, 3,7 – 2014-09-22 15:23:44