2016-07-06 92 views
0

我再次停留在答案上。該程序打印唯一值,但我無法得到這些唯一值的總和。任何幫助表示讚賞在Java中打印一個整數數組的唯一值的總和

public static void main(String args[]){ 
    int sum = 0; 
    Integer[] numbers = {1,2,23,43,23,56,7,9,11,12,12,67,54,23,56,54,43,2,1,19}; 
    Set<Integer> setUniqueNumbers = new LinkedHashSet<Integer>(); 

    for (int x : numbers) { 
     setUniqueNumbers.add(x); 
    } 
    for (Integer x : setUniqueNumbers) { 
     System.out.println(x); 
     for (int i=0; i<=x; i++){ 
      sum += i; 
     } 
    } 
    System.out.println(sum); 
} 
+3

你正在索引i,索引,而不是集合中的值。 – OldProgrammer

+2

循環應該做什麼?for(int i = 0; i <= x; i ++)? – khelwood

回答

4

這是利用了Java 8語言增加的一個很好的例子:

int sum = Arrays.stream(numbers).distinct().collect(Collectors.summingInt(Integer::intValue)); 

這條線將取代在你的代碼一切開始於Set聲明,直到System.out.println前的最後一道防線。

+1

或者稍微短一些:'Arrays.stream(numbers).distinct()。mapToInt(i - > i).sum()' – xehpuk

-1

的錯誤就行

sum += i; 

應該

sum += x; 
2

沒有必要爲這個循環

for (int i=0; i<=x; i++){ 
    sum += i; 
} 

因爲你」重新加入i大鼠她比集合中的實際整數。這裏發生的是,您將從0到x的所有數字添加到sum。因此,對於23,你沒有23增加sum,相反,你要添加1 + 2 + 3 + 4 + 5 + ... + 23 sum。所有你需要做的就是添加X,因此,上述循環可以省略,並加入x到sum的簡單的線條所取代,

sum += x; 
1

如果一個處於較低水平循環等。 最好的,擺脫低級代碼和使用Java API的8戳周圍這種錯誤總是occures:

Integer[] numbers = {1,2,23,43,23,56,7,9,11,12,12,67,54,23,56,54,43,2,1,19}; 

int sum = Arrays.stream(numbers) 
     .distinct() 
     .mapToInt(Integer::intValue) 
     .sum(); 

這樣有勉強任何錯誤的空間。 如果你有一個int數組,代碼更短:

int[] intnumbers = {1,2,23,43,23,56,7,9,11,12,12,67,54,23,56,54,43,2,1,19}; 
int sumofints = Arrays.stream(intnumbers) 
       .distinct() 
       .sum(); 
相關問題