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]