我是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] + " ");
}
}
您无法从数组中删除元素,数组具有在创建时确定的固定长度。您可以创建一个少两个元素的新数组。您只需要一个循环来确定
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]
使用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
数组是长度/大小无法更改的东西。它们以固定大小创建,无法修改。如果你想使用你提到的功能,最好选择列表,最好是 ArrayList
List<Integer> list= new ArrayList<Integer>();
如果需要,您始终可以将 ArrayList 作为数组返回。您可以搜索类似的功能
list.toArray()
//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