Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我想知道如何从数组中删除某些元素_Java_Arrays - Fatal编程技术网

Java 我想知道如何从数组中删除某些元素

Java 我想知道如何从数组中删除某些元素,java,arrays,Java,Arrays,在这个程序中,我希望能够从数组中删除最小值和最大值,但我不知道如何做 public class Average { public static void main (String [ ] args) { double [] weights = {39.5, 34.8, 22.6, 38.7, 25.4, 30.1, 41.8, 33.6, 26.2, 27.3}; double minimum = Integer.MAX_VALUE; double maxi

在这个程序中,我希望能够从数组中删除最小值和最大值,但我不知道如何做

public class Average
{

  public static void main (String [ ] args) 
  {

    double [] weights = {39.5, 34.8, 22.6, 38.7, 25.4, 30.1, 41.8, 33.6, 26.2, 27.3};
    double minimum = Integer.MAX_VALUE;
    double maximum = Integer.MIN_VALUE;

    for(int i = 0; i < weights.length; i++){
        if(minimum > weights [i])
            minimum = weights[i];
    }

    for(int i = 0; i < weights.length; i++){
        if(maximum < weights [i])
            maximum = weights[i];
    }
  } 
}
公共类平均值
{
公共静态void main(字符串[]args)
{
双[]权重={39.5,34.8,22.6,38.7,25.4,30.1,41.8,33.6,26.2,27.3};
双最小值=整数最大值;
双倍最大值=整数最小值;
对于(int i=0;i权重[i])
最小值=重量[i];
}
对于(int i=0;i
使用java 8,您可以使用
从数组中过滤出您不想要的内容。为了在
filter
方法中使用最小和最大变量,必须将它们放入
final
变量中。在filter方法中看到的
w
是一个表示每个元素值的局部变量

您也不必在数组中运行两次来查找最小值和最大值。只需使用
if/else if
设置适当的最小/最大值

import java.util.Arrays;

public class StackOverflow {
    public static void main(String args[]) {
        double[] weights = { 39.5, 34.8, 22.6, 38.7, 25.4, 30.1, 22.6, 41.8, 33.6, 26.2, 27.3 };
        double minimum = Double.MAX_VALUE;
        double maximum = Double.MIN_VALUE;

        for (int i = 0; i < weights.length; i++) {
            if (minimum > weights[i])
                minimum = weights[i];
            else if (maximum < weights[i])
                maximum = weights[i];
        }

        System.out.println("Before: " + Arrays.toString(weights));

        final double minimumFilter = minimum;
        final double maximumFilter = maximum;
        weights = Arrays.stream(weights)
                .filter(w -> w != minimumFilter && w != maximumFilter)
                .toArray();

        System.out.println("After : " + Arrays.toString(weights));
    }
}

有了Java8,您可以使用
从数组中过滤出您不想要的内容。为了在
filter
方法中使用最小和最大变量,必须将它们放入
final
变量中。在filter方法中看到的
w
是一个表示每个元素值的局部变量

您也不必在数组中运行两次来查找最小值和最大值。只需使用
if/else if
设置适当的最小/最大值

import java.util.Arrays;

public class StackOverflow {
    public static void main(String args[]) {
        double[] weights = { 39.5, 34.8, 22.6, 38.7, 25.4, 30.1, 22.6, 41.8, 33.6, 26.2, 27.3 };
        double minimum = Double.MAX_VALUE;
        double maximum = Double.MIN_VALUE;

        for (int i = 0; i < weights.length; i++) {
            if (minimum > weights[i])
                minimum = weights[i];
            else if (maximum < weights[i])
                maximum = weights[i];
        }

        System.out.println("Before: " + Arrays.toString(weights));

        final double minimumFilter = minimum;
        final double maximumFilter = maximum;
        weights = Arrays.stream(weights)
                .filter(w -> w != minimumFilter && w != maximumFilter)
                .toArray();

        System.out.println("After : " + Arrays.toString(weights));
    }
}

解决这个问题有多种方法

  • 遍历数组并跳过所需的索引,并将所有剩余值存储到新数组中
  • 使用“数组复制”可以复制没有最小值和最大值的元素
  • 但我建议为此使用集合框架

  • 解决这个问题有多种方法

  • 遍历数组并跳过所需的索引,并将所有剩余值存储到新数组中
  • 使用“数组复制”可以复制没有最小值和最大值的元素
  • 但我建议为此使用集合框架

  • 我认为您最好将背后的逻辑封装在工具方法中,如下所示:

    // all minimums and maximums in the array will be deleted and return a brand-new array;
    public static Double[] removeMinMax(Double[] arr) {
        if (arr == null || arr.length == 0) throw new IllegalArgumentException();
        // a trick to be used avoid lambda `effectively final` check;
        Double[] minMax = {arr[0], arr[0]};
        for (int i = 0; i < arr.length; ++i) {
            if (minMax[0].compareTo(arr[i]) > 0) minMax[0] = arr[i];
            if (minMax[1].compareTo(arr[i]) < 0) minMax[1] = arr[i];
        }
        return Arrays.stream(arr)
                .filter(a -> a.compareTo(minMax[0]) != 0 && a.compareTo(minMax[1]) != 0)
                .toArray(Double[]::new);
    }
    
    结果将是:

    // minimum 22.6 and maximum 41.8 are removed
    [39.5, 34.8, 38.7, 25.4, 30.1, 33.6, 26.2, 27.3]
    

    我认为您最好将背后的逻辑封装在工具方法中,如下所示:

    // all minimums and maximums in the array will be deleted and return a brand-new array;
    public static Double[] removeMinMax(Double[] arr) {
        if (arr == null || arr.length == 0) throw new IllegalArgumentException();
        // a trick to be used avoid lambda `effectively final` check;
        Double[] minMax = {arr[0], arr[0]};
        for (int i = 0; i < arr.length; ++i) {
            if (minMax[0].compareTo(arr[i]) > 0) minMax[0] = arr[i];
            if (minMax[1].compareTo(arr[i]) < 0) minMax[1] = arr[i];
        }
        return Arrays.stream(arr)
                .filter(a -> a.compareTo(minMax[0]) != 0 && a.compareTo(minMax[1]) != 0)
                .toArray(Double[]::new);
    }
    
    结果将是:

    // minimum 22.6 and maximum 41.8 are removed
    [39.5, 34.8, 38.7, 25.4, 30.1, 33.6, 26.2, 27.3]
    

    是否复制到新阵列?是否排除最小和最大元素?如果这些元素出现两次或两次以上会发生什么情况?您不能真正删除或添加到数组中。最好将所有内容都存储在列表中。ArrayList在这里可以很好地工作。运行与上面相同的循环,找到最大值和最小值,将它们存储在变量中,只需执行ArrayList.remove(最大值);ArrayList.remove(最小值);无论谁对问题和/或答案投反对票,请解释一下你为什么这样做?我希望你知道你会因为投票失败而失去声望点。复制到新阵列?是否排除最小和最大元素?如果这些元素出现两次或两次以上会发生什么情况?您不能真正删除或添加到数组中。最好将所有内容都存储在列表中。ArrayList在这里可以很好地工作。运行与上面相同的循环,找到最大值和最小值,将它们存储在变量中,只需执行ArrayList.remove(最大值);ArrayList.remove(最小值);无论谁对问题和/或答案投反对票,请解释一下你为什么这样做?我希望你知道,你会因为落选而失去声望。。
    // minimum 22.6 and maximum 41.8 are removed
    [39.5, 34.8, 38.7, 25.4, 30.1, 33.6, 26.2, 27.3]