在ArrayList w/o排序中查找最小值和最大值-Java

在ArrayList w/o排序中查找最小值和最大值-Java,java,arraylist,main,minimum,Java,Arraylist,Main,Minimum,我尝试在ArrayList中查找最小值和最大值,而不进行排序: 以下是我目前的尝试-但我似乎无法让它正常工作: import java.util.*; class Untitled { static ArrayList<Integer> al = new ArrayList<Integer>(); public static void main(String[] args) { System.out.println(populateA

我尝试在ArrayList中查找最小值和最大值,而不进行排序:

以下是我目前的尝试-但我似乎无法让它正常工作:

import java.util.*;

class Untitled {
    static ArrayList<Integer> al = new ArrayList<Integer>();

    public static void main(String[] args) {

        System.out.println(populateArray(al));
        System.out.println(findMin(al,0));

    }   

    public static ArrayList<Integer> populateArray(ArrayList<Integer> a) {

        al.add(1);
        al.add(2);
        al.add(30);
        al.add(3);
        al.add(13);
        al.add(34);
        al.add(4);
        al.add(3);
        al.add(2);
        al.add(1);
        al.add(93);
        return a;
    }

    public static int findMin(ArrayList<Integer> a, int start) {
        int min = start;

        for(int i=start; i<a.size(); i++) {
            if(a.get(i) < a.get(min)) {
                min = i;
            }
        }
        return start;
    }
}
import java.util.*;
类无标题{
静态ArrayList al=新ArrayList();
公共静态void main(字符串[]args){
系统输出打印LN(populateArray(al));
系统输出println(findMin(al,0));
}   
公共静态ArrayList populateArray(ArrayList a){
al.添加(1);
al.添加(2);
加(30);
al.添加(3);
al.添加(13);
al.添加(34);
al.添加(4);
al.添加(3);
al.添加(2);
al.添加(1);
加(93);
返回a;
}
公共静态int-findMin(数组列表a,int-start){
int min=开始;

对于(int i=start;i使用Java 8,您可以非常轻松地遍历列表一次:

IntSummaryStatistics stats = al.stream().mapToInt(Integer::intValue).summaryStatistics();
System.out.println("Minimum is: "+stats.getMin());
System.out.println("Maximum is: "+stats.getMax());

也许你正在寻找这样的东西:

    public static void main(String[] args) {
        findMinMax(new int[] {10,40,50,20,69,37});
    }
    public static void findMinMax(int[] array) {
        if (array == null || array.length < 1)
            return;
        int min = array[0];
        int max = array[0];

        for (int i = 1; i <= array.length - 1; i++) {
            if (max < array[i]) {
                max = array[i];
            }

            if (min > array[i]) {
                min = array[i];
            }
        }
        System.out.println("min: " + min + "\nmax: " + max);
    }
publicstaticvoidmain(字符串[]args){
findMinMax(新的int[]{10,40,50,20,69,37});
}
公共静态void findMinMax(int[]数组){
if(array==null | | array.length<1)
返回;
int min=数组[0];
int max=数组[0];
for(int i=1;i数组[i]){
min=数组[i];
}
}
System.out.println(“最小值:+min+”\n最大值:+max);
}
显然,这不是最优化的解决方案之一,但它对您有效。它使用简单的比较来跟踪
min
max
值。输出为:

min:10

max:69

您需要执行以下操作:

   public static int findMin(ArrayList<Integer> a) {
            int min = 0;

            for(int i=0; i<a.size(); i++) {
               if(i==0) min= a.get(i);
                if(a.get(i) < min) {
                    min = a.get(i);
                }
            }
            return min;
        } 

public static int findMax(ArrayList<Integer> a) {
        int max = 0;

        for(int i=0; i<a.size(); i++) {
           if(i==0) max= a.get(i);               
           if(a.get(i) > max) {
                max = a.get(i);
            }
        }
        return max;
    }
publicstaticintfindmin(arraylista){
int min=0;

对于(int i=0;i您在最后返回
start
。您能与潜在的回答者分享您发现了哪些问题吗?这意味着您不想使用
Collections.min
Collections.max
。但是为什么呢?返回
min
而不是
start
,您不会一直更新
start
@我最担心的是什么让我们把这两个人搞混:)