2014-03-12 62 views
5

我想寫一個程序,它將生成一個隨機的十個整數數組(1到6之間的整數),然後我必須刪除所有重複項來形成另一個數組。所以{1,3,5,5,3,4,2,2,2,1}應該返回{1,3,5,4,2}。 問題是,我得到一個答案,但輸出數組包含0在重複的地方,我不知道如何減少臨時數組的長度(如果它甚至可能)。 這裏是我的程序:從Java中的數組中刪除重複項

import java.util.*; 
public class Lab9Tut12{ 
public static void main (String[]args){ 
    int [] numbers = new int[10]; 
    //int length = 10; 
    int[] temp = new int[length]; 
    for(int i=0;i<10;i++){ 
     numbers [i] = (int)(Math.random()*6+1); 
     System.out.print(numbers [i]); 
     System.out.println(); 
    } 
    for(int i=1;i<10;i++){ 
     if(numbers[i-1]!=numbers[i]){ 
     temp[i]= numbers[i]; 
     //length--; 
     } 
    } 
    System.out.println(Arrays.toString(temp)); 
} 

}

+0

不能減少數組長度,因爲它有一個固定的大小不能在運行時更改。 – Salah

+0

你需要第一個數組嗎?如果不是,則可以驗證何時輸入重複值的新值。或者你可以使用Set(不允許重複)。 – Edwin

+0

如果有人幫助你,你應該接受一個答案。 – Cruncher

回答

1

你可以使用一個Set來存儲您獨特的隨機數。 Set API

Set<Integer> set = new HashSet<Integer>(); 
set.add(randomNumber); 
... 

後來轉換到一個列表:

List<Integer> list = new ArrayList<Integer>(set); 
+0

謝謝你的快速響應! :) –

+0

Set和List之間有什麼區別,彼此的優點是什麼? :) –

+0

'Set'沒有重複的元素。 –

3

使用Set代替。將所有數組值放入一個集合中,然後轉換回數組。

Set<Integer> numbersSet = new HashSet()<> (Arrays.asList(numbers)); 

Integer[] uniqueNumbers = numbersSet.toArray(new Integer[0]); 

設置將消除所有你重複的,你不需要做任何事情。把數字放在那裏。

4

這樣做的一個好方法是利用Set。這是一個只包含唯一值的結構。

Set<Integer> set = new HashSet<Integer>(); 
int[] array = {1,1,2,2,2,3,3,4,5,6,8}; 

for (int num : array) { 
    set.add(num); 
} 

System.out.println(set); 

輸出:

[1, 2, 3, 4, 5, 6, 8] 

到設定轉換爲數組,您可以使用set.toArray()

+0

這真的很好,因爲如果add方法已經在集合中,將不會添加整數。 乾杯! :) –

+0

危險! 'HashSet'中的迭代次序沒有保證。如果迭代順序很重要,你想使用'LinkedHashSet'。 – fge

1

試試用這段代碼。 Set不允許放置2個相同的對象。

import java.util.HashSet; 
import java.util.Set; 

public class MyClass { 

    public static void main(String[] args) { 

     int size = 10; 
     Set<Integer> numbers = new HashSet<Integer>(); 

     for (int i = 0; i < size; i++) { 
      numbers.add((int) (Math.random() * 6 + 1)); 
     } 

     System.out.println(numbers); 

    } 
} 
+0

謝謝,這是處理我們不知道長度的數組的真正好方法。 乾杯! –

1

使用Set是好的,但是你將有一個問題:它.toArray()將返回Integer[],不是int[](你不能有一個Set<int>)。

這裏仍然使用了一組,但不同的解決方案:

public static int[] onlyUniqueElements(final int[] inputArray) 
{ 
    final Set<Integer> set = new HashSet<>(); 
    final int[] tmp = new int[inputArray.length]; 
    int index = 0; 
    for (final int i: inputArray) 
     if (set.add(i)) 
      tmp[index++] = i; 

    return Arrays.copyOfRange(tmp, 0, index); 
} 
+0

非常感謝! :) –