如何从数组中删除最小值和最大值?

问题描述 投票:0回答:4

我是java新手。我试图找到数组中的最小最大元素,然后删除最小值和最大值。这是我写的代码,它只适用于最大而不是最小。

public class delminmax {

    public static void main(String[] args) {
        int [] nums = {10,50,20,90,22};
        int max = 0;
        int min = 0;
        for (int i=0; i<nums.length; i++) {
            if (nums[i]> max)
                max = nums[i];
        }
        
        System.out.println("The max number is "+ max);

        for (int i=0;i<nums.length;i++)
            if (max==nums[i]) {
                for (int j=i; j<nums.length-1;j++)
                    nums[j]= nums[j+1];
                
            }
        for (int i=0;i<nums.length-1;i++)
            System.out.print(nums[i]+ " " + "\n");
        
        for (int i=0; i<nums.length; i++) {
            if (nums[i]< min)
                min = nums[i];
        }
        System.out.println("The min number is "+ min);
        
        
        for (int i=0;i<nums.length;i++)
            if (min==nums[i]) {
                for (int j=i; j<nums.length-1;j++)
                    nums[j]= nums[j+1];
                
            }
        for (int i=0;i<nums.length-1;i++)
            System.out.println(nums[i] + " ");
    }
}
java arrays sorting oop
4个回答
0
投票

您无法从数组中删除元素,数组具有在创建时确定的固定长度。您可以创建一个少两个元素的新数组。您只需要一个循环来确定

min
max
,但在我看来,跟踪
min
max
元素的索引更干净,而不是直接这样做。然后,当您将
nums
复制到新数组时,您可以使用第二个循环来跳过这些元素。就像,

int[] nums = { 10, 50, 20, 90, 22 };
int mini = 0, maxi = 0;
for (int i = 1; i < nums.length; i++) {
    if (nums[i] < nums[mini]) {
        mini = i;
    }
    if (nums[i] > nums[maxi]) {
        maxi = i;
    }
}
System.out.printf("The min = %d, the max = %d%n", nums[mini], nums[maxi]);
int[] newNums = new int[nums.length - 2]; // A new array, with two fewer elements
int p = 0;
for (int i = 0; i < nums.length; i++) {
    if (i != mini && i != maxi) {
        newNums[p++] = nums[i];
    }
}
System.out.println(Arrays.toString(newNums));

哪个输出

The min = 10, the max = 90
[50, 20, 22]

0
投票

使用Java 8

您可以尝试使用

streams
,方法如下:

方法在这里:

我已转换

sorted
列表中给定的整数数组,然后使用以下任意方法从该列表中查找最小和最大整数,然后使用这些
nums
min
整数过滤
max
数组并将过滤后的列表转换回整数数组

查找数组中的最小和最大整数

1) 通过使用流中的 IntSummaryStatistics

IntSummaryStatistics statistics = Arrays.stream(nums).summaryStatistics();
        int minNum = statistics.getMin();
        int maxNum = statistics.getMax();

2)通过对数组进行排序

List<Integer> mainList = Arrays.stream(nums).boxed().sorted()
                                       .collect(Collectors.toList());
        int minNum = mainList.get(0);
        int maxNum = mainList.get(mainList.size()-1);

注意: 它将从给定数组中删除所有出现的最小和最大整数。

    public class Test {
      public static void main(String[] args) {
        int [] nums = {10,50,90,20,5,90,22,5};
        
        IntSummaryStatistics statistics = Arrays.stream(nums).summaryStatistics();
        int minNum = statistics.getMin();
        int maxNum = statistics.getMax();

        int[] num = Arrays.stream(nums)
                           .filter(x -> x != minNum && x != maxNum).toArray();
        for(int i:num){
            System.out.print(i + " ");
        }
    }
}

测试用例:

Input: {10,50,90,20,5,90,22,5}
Output: 10 50 20 22

Input: {10, 50, 20, 90, 22}
Output: 50 20 22

0
投票

数组是长度/大小无法更改的东西。它们以固定大小创建,无法修改。如果你想使用你提到的功能,最好选择列表,最好是 ArrayList

List<Integer> list= new ArrayList<Integer>();

如果需要,您始终可以将 ArrayList 作为数组返回。您可以搜索类似的功能

list.toArray()

0
投票
    //Find maximum and minimum value in given array
    int [] arr= {1,2,3,4,5,6,7,8,9,23,25,28,23,0,1,2,3,4,5,6,99};
    Set<Integer> hashSet=new HashSet<Integer>();
    for(int i=0;i<arr.length;i++) {
        hashSet.add(arr[i]);
    }
    Integer[] newarr=new Integer[hashSet.size()];
    int j=0;
    for(int num : hashSet) {
        newarr[j++]=num;
    }
    Collections.sort(Arrays.asList(newarr));
    System.out.println("Minimum value is "+newarr[0]);
    System.out.println("Maximum value is "+newarr[newarr.length-1]);

输出为: 最小值为 0 最大值为 99

© www.soinside.com 2019 - 2024. All rights reserved.