2014-10-31 45 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);