2014-10-31 42 views
0

的distincts的我有一個另外的程序:薩姆擴展說明

import java.io.*; 

public class sum 
{ 
    int num; 
    int sum = 0; 
    int result; 

    public void findsum() throws IOException 
    { 
     BufferedReader Br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.print("enter the value for N : "); 
     num = Integer.parseInt(Br.readLine()); 
     int nums[] = new int[num+1]; 

     for(int i = 1; i <= num; i++) 
     { 
      System.out.print("\n Enter " + i + " number: "); 
      nums[i]= Integer.parseInt(Br.readLine()); 
      sum = sum + nums[i]; 
     } 

     System.out.print("\n Sum is : " + sum); 
    } 

    public static void main(String args[]) throws IOException 
    { 
     sum sm = new sum(); 
     sm.findsum(); 
    } 
} 

輸出:

它佔據N Integer值作爲來自用戶的輸入,並返回這些N個的總和。

但我想如果任何數字等於另一個它會自動忽略他們另外。

回答

0

只需驗證輸入號碼是否不在數組中。

這種變化您的for循環,它會很好地工作:

for (int i = 1; i <= num; i++) { 

    System.out.print("\n Enter the " + i + " number : "); 
    int x = Integer.parseInt(Br.readLine()); 
    int j=0; 
    while(j<num && nums[j]!=x) { 
    j++; 
    } 
    if(j>=num) { 
    nums[i] = x; 
    } 

    sum = sum + nums[i]; 

} 
+0

它工作正常,日Thnx ....但你能解釋一下邏輯... – 2014-10-31 10:42:47

0

從你的問題

我想如果有數量等於其他的話,會 自動忽略它們除了

它將如果方便您使用Set這裏

Set<Integer> numbers=new HashSet<>(); 
for(int i = 1;i<=num;i++){ 
    System.out.print("\n Enter " + i + " number : "); 
    numbers.add(Integer.parseInt(Br.readLine())); // add to set  

}

現在重複值不考慮。然後只需在Set中添加元素即可。

0

有幾個問題:

  • 您的循環從1開始,你使用數組的索引是nums [i],這意味着你的數組將從1開始。數組從0開始索引,因此在你爲數組引用循環索引時使用i-1,或者使用循環從0開始到n-1。

  • 如果你想與您的實現與陣列堅持那麼在每一個for循環,做你需要遍歷每個較早元素來檢查和之前如果數組中的元素像已經存在:

    numberFound = false; 
    for (int j = 1; j < i; j++) { 
        if (nums[j - 1] == nums[i - 1]) { 
         numberFound = true; 
         System.out.println("Duplicate number " + nums[i - 1] 
          + " will be ignored"); 
         break; 
        } 
    } 
    if (!numberFound) { 
        sum = sum + nums[i - 1]; 
    } 
    
0

使用集去除冗餘

Set<Integer> num = new HashSet<Integer>(); 
    num.add(123); 
    num.add(123); 
    num.add(1); 
    num.add(1); 

    Integer sum=0; 
    for(Object a: num.toArray()){ 
     sum+=(Integer)a; 
    } 
    System.out.println(sum); //124 
0

當使用的Java 8可以讓Stream API做的工作:

從JavaDoc的:

返回由不同元件的(根據的Object.Equals(對象))該流的一個流。


如何使用:

final int[] nums = new int[] {1, 2, 2, 3, 4, 4, 4}; 
final int sum = IntStream.of(nums) 
    .distinct() 
    .sum(); 

System.out.println(sum); // prints 10 (1 + 2 + 3 + 4);