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

这是使用 Java 8 语言添加的一个很好的例子:

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

此行将替换代码中的所有内容,从Set声明开始,直到System.out.println之前的最后一行。

不需要这个循环

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

因为您添加的是i而不是集合中的实际整数。这里发生的事情是,您将从 0 到 x 的所有数字添加到 sum .所以对于23,你不是sum增加23,而是增加1+2+3+4+5+....+23到sum。您需要做的就是添加 x,因此可以省略上面的循环并替换为将 x 添加到 sum 的简单行,

sum += x;

如果一个人在低级循环等中四处闲逛,总是会发生这种错误。最好的办法是,摆脱低级代码并使用Java 8 API:

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

所以这是我第一次在任何地方发表评论,我真的很想分享我只打印数组中唯一值的方式,而不需要任何实用程序。

//The following program seeks to process an array to remove all duplicate integers.
//The method prints the array before and after removing any duplicates
public class NoDups
{
    //we use a void static void method as I wanted to print out the array without any duplicates. Doing it like this negates the need for any additional code after calling the method
    static void printNoDups(int array[]) 
    {   //Below prints out the array before any processing takes place
        System.out.println("The array before any processing took place is: ");
        System.out.print("{");
        for (int i = 0; i < array.length; i++)
        {
            System.out.print(array[i]);
            if (i != array.length - 1)
                System.out.print(", ");
        }
        System.out.print("}");
        System.out.println("");
        //the if and if else statements below checks if the array contains more than 1 value as there can be no duplicates if this is the case
        if (array.length==0)
            System.out.println("That array has a length of 0.");
        else if (array.length==1)
            System.out.println("That array only has one value: " + array[0]);
        else //This is where the fun begins
        {   
            System.out.println("Processed Array is: ");
            System.out.print( "{" + array[0]);//we print out the first value as it will always be printed (no duplicates has occured before it)
            for (int i = 1; i < array.length; i++) //This parent for loop increments once the all the checks below are run
            {
                int check = 0;//this variable tracks the amount of times an value has appeared
                for(int h = 0; h < i; h++) //This loop checks the current value for array[i] against all values before it
                {
                    if (array[i] == array[h])
                        {
                        ++check; //if any values match during this loop, the check value increments
                        }
                }
                if (check != 1) //only duplicates can result in a check value other than 1
                {
                    System.out.print(", " + array[i]);
                }
            }       
        }
            System.out.print("}"); //formatting
            System.out.println("");
    }

    public static void main(String[] args)
    { //I really wanted to be able to request an input from the user but so that they could just copy and paste the whole array in as an input.
        //I'm sure this can be done by splitting the input on "," or " " and then using a for loop to add them to the array but I dont want to spend too much time on this as there are still many tasks to get through!
        //Will come back and revisit to add this if I remember.
        int inpArray[] = {20,100,10,80,70,1,0,-1,2,10,15,300,7,6,2,18,19,21,9,0}; //This is just a test array
        printNoDups(inpArray);
    }   
}

错误在线

sum += i;

它应该是

sum += x;

相关内容

  • 没有找到相关文章

最新更新