区别总和扩展描述

时间:2014-10-31 10:01:43

标签: java

我有一个附加程序:

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个数字的总和。

但我想如果任何一个数字等于另一个数字,它会自动忽略它们。

5 个答案:

答案 0 :(得分: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

中添加元素

答案 1 :(得分: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];

}

答案 2 :(得分:0)

有几个问题:

  • 你的for循环从1开始,你使用的数组的索引是nums [i],这意味着你的数组将从1开始。数组从第0个索引开始,因此当你引用索引时使用i-1为你的数组循环或使用从0到n-1的循环。

  • 如果您希望坚持使用Array实现,那么在每个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];  
    }  
    

答案 3 :(得分:0)

使用Set删除冗余

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

答案 4 :(得分:0)

使用 Java 8 时,您可以让Stream API完成工作:

来自JavaDoc:

  

返回由此流的不同元素(根据Object.equals(Object))组成的流。


使用方法:

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);