Java 查找arraylist的和但不包括最大元素

Java 查找arraylist的和但不包括最大元素,java,arrays,arraylist,sum,Java,Arrays,Arraylist,Sum,我目前没有任何代码,但我需要返回arraylist的和,但不包括最大的元素,例如,3,4,5,10,我必须找到3+4+5的和,它=12。 我不知道如何编写代码,使其忽略最大的元素。 我目前有: int sum = 0; for(int i = 0; i < array.length; i++) sum = sum + array[i]; return sum; int和=0; for(int i=0;i10k),这也非常有用,因为它提供了开箱即用的多线程功能。试试这个 import

我目前没有任何代码,但我需要返回arraylist的和,但不包括最大的元素,例如,3,4,5,10,我必须找到3+4+5的和,它=12。 我不知道如何编写代码,使其忽略最大的元素。 我目前有:

int sum = 0;
for(int i = 0; i < array.length; i++)
   sum = sum + array[i];
return sum;
int和=0;
for(int i=0;i
我将此问题视为两个问题的简单组合:

  • 对集合中的所有元素求和
  • 查找集合中最大的元素
  • 您可能可以在集合的一次迭代中完成这两项工作:

    • 一个接一个地求和元素,跟踪到目前为止的最高值
    • 完成后,将最高值减去总金额
    但是有许多其他的方式,如评论或回答中所述;只要找到你认为最符合你逻辑的方法。

    计算全和,然后计算最大元素并从全和中减去:

    List<Integer> values = List.of(3, 4, 5, 10);
    
    int sum = 0;
    for (int value : values) {
        sum += value;
    }
    
    int max = Collections.max(values);
    
    sum -= max;
    
    如果您有一个非常大的数据列表(>10k),这也非常有用,因为它提供了开箱即用的多线程功能。

    试试这个

    import java.util.Arrays;
    public class Sum {
    
        public static void main(String[] args) 
        {
            // TODO Auto-generated method stub
            //arr size>1
            int arr[] = {3,5,4};
            int res[] = getSumAndMax(arr);
            
            int sum=0;
            Arrays.sort(arr);
            for(int i=0;i<arr.length-1;i++)
            {
                sum+=arr[i];
            }
            System.out.println("sum="+sum+" :max="+arr[arr.length-1]);
            System.out.println("sum="+res[0]+" :max="+res[1]);
        }
        public static int[] getSumAndMax(int[] arr)
        {
            int sum=0;
            int max=arr[0];
            for(int i=0;i<arr.length;i++)
            {
                sum+=arr[i];
                max = Math.max(max, arr[i]);
            }
            int out[] = {sum-max, max};
            return out;
        }
    }
    
    • 将sum和max设置为第一个值
    • 然后迭代并计算sum,然后找到max
    • 然后返回总和减去最大值

    迭代所有元素,求和,同时检查最大值。迭代后从总和中减去max。首先需要找到最大的元素。有多种方法,其中一种是对列表进行升序排序。只需求和到最后,但最后一个(最后一个是最大的)…谢谢你的帮助,但当我说数组时。排序(数组),它说找不到任何名为“array”的东西?必须先导入类,默认情况下在
    java.lang
    中不是这样的<代码>导入java.util.array非常感谢您的帮助,显然我不需要对数组进行排序,我只需要按照您所说的执行长度-1。我喜欢这个网站:),如果它没有排序,你会得到正确的答案,如果你有幸在最后一个位置上有
    max
    。(排序强制在最后一个位置上有max)也要注意排序是很耗时的,所以即使你得到了正确的答案,也许在最后通过计算总和和扣除来计算max会更快…显然在流的情况下,“高效”更注重代码的简洁性,而不是高效的代码。@trilogy在“一次迭代中的所有内容”的意义上是高效的。
    List<Integer> values = List.of(3, 4, 5, 10);
    
    IntSummaryStatistics stats = values.stream()
        .mapToInt(Integer::intValue)
        .summaryStatistics();
    
    int sum = stats.getSum() - stats.getMax();
    
    import java.util.Arrays;
    public class Sum {
    
        public static void main(String[] args) 
        {
            // TODO Auto-generated method stub
            //arr size>1
            int arr[] = {3,5,4};
            int res[] = getSumAndMax(arr);
            
            int sum=0;
            Arrays.sort(arr);
            for(int i=0;i<arr.length-1;i++)
            {
                sum+=arr[i];
            }
            System.out.println("sum="+sum+" :max="+arr[arr.length-1]);
            System.out.println("sum="+res[0]+" :max="+res[1]);
        }
        public static int[] getSumAndMax(int[] arr)
        {
            int sum=0;
            int max=arr[0];
            for(int i=0;i<arr.length;i++)
            {
                sum+=arr[i];
                max = Math.max(max, arr[i]);
            }
            int out[] = {sum-max, max};
            return out;
        }
    }
    
    sum=7 :max=5
    
    public static int findSum(int[] array) {
        if (array == null || array.length <2){
                return 0;
        }
        int max = array[0];
        int sum = max;
        for (int i = 1; i < array.length; i++) {
            int v = array[i];
            sum = sum + v;
            if (v > max) {
                max = v;
            }
        }
        return sum - max;
    }
    
    public static int findSumStream(int[] array) {
        return array == null || array.length < 2 ? 0 : Arrays
                .stream(array)
                .map(i -> ~i)
                .sorted()
                .map(i->~i)
                .skip(1)
                .sum();
        
    }