如何找到嵌套ArrayList的最大值和最小值?

时间:2017-02-22 15:33:35

标签: java

假设我有N个数组列表,并且在其中,还有其他M个数组列表,所以我试图找到这些M数组列表的最小值和最大值,这是最好的这样做的方法?

    ArrayList<String> myname = new ArrayList<String>(n);
    ArrayList<Integer> myscore = new ArrayList<Integer>(m);
    for (int i = 0; i < n; i++) {                              
        System.out.println("enter name of contestant");
        myname.add(input.next());
        for (int j = 0; j < m; j++) {                         
            System.out.println("enter score");
            myscore.add(input.nextInt());
        }

4 个答案:

答案 0 :(得分:3)

您可以使用IntSummaryStatistics类:

IntSummaryStatistics istats = IntStream.of(1,22,33,44,55).
                collect(IntSummaryStatistics::new,  IntSummaryStatistics::accept,
                        IntSummaryStatistics::combine);
System.out.println("Max: "+istats.getMax()+", Min: "+istats.getMin());
// Max: 55, Min: 1

答案 1 :(得分:0)

您可以使用Collections.max(arrayList)。只是为了说明它是如何工作的。

public static void main(String[] args)
{
ArrayList<ArrayList<Integer>> n = new ArrayList<>();
ArrayList<Integer> m0 = new ArrayList<>(); 
ArrayList<Integer> m1 = new ArrayList<>(); 

m0.add(100);     
m0.add(200);
m0.add(300);
m0.add(400);
n.add(m0);

m1.add(10);
m1.add(20);
m1.add(30);
m1.add(40);
n.add(m1);


System.out.println(n);
System.out.println(Collections.max(n.get(0)));
System.out.println(Collections.min(n.get(0)));
System.out.println(Collections.max(n.get(1)));
System.out.println(Collections.min(n.get(1)));


}

生成

[[100, 200, 300, 400], [10, 20, 30, 40]]
400
100
40
10

对于你的情况,你可以遍历你的n arraylists来获得每个人的最小值和最大值。

答案 2 :(得分:0)

你的问题解释不是那么多。假设你想要添加一些学生的名字,你也想保存每个学生获得的相应分数。所以你需要三个ArrayList引用变量。第一个用于存储名称,第二个用于存储学生获得的标记,第三个用于存储由单个学生获得的标记的ArrayList。这里是代码

package exmaple;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Finder {

    public static void main(String[] args) {

        Scanner userInput = new Scanner(System.in);

        int n = userInput.nextInt();
        int m = userInput.nextInt();


        ArrayList<String> names = new ArrayList<String>(n);
        ArrayList<Integer> numbers;

        ArrayList<ArrayList<Integer>> holderOfMarksArayList = new ArrayList<ArrayList<Integer>>();


        for(int i = 0; i<n; i++) {
            System.out.println("Enter name of contentant.");
            String name = userInput.next();
            names.add(name);
            numbers = new ArrayList<Integer>(m);
            for(int j = 0; j<m; j++) {
                System.out.println("Enter score.");
                numbers.add(userInput.nextInt());
            }
            holderOfMarksArayList.add(numbers);
        }

        int counter = 0;
        for(String name : names) {
            numbers = holderOfMarksArayList.get(counter);
            Collections.sort(numbers);
            int maxScore = numbers.get(numbers.size() - 1);
            int minScore = numbers.get(0);
            System.out.println(name +",  Max Score = " + maxScore + " Min Score = " + minScore);
            counter++;
        }
        userInput.close();

    }

}

如果您尝试使用以下输入

AAA = 20,80,10

XXX = 66,98,96

YYY = 65,12,76

您将获得以下输出

AAA,最高分= 80分最低= 10

XXX,最高分= 98分最低分= 66

YYY,最高得分= 76分最低= 12

答案 3 :(得分:0)

如果您想找出获胜者,您应该将每个获胜者获得的分数相加,并将其与临时变量进行比较。如果总和大于temp,则将总和分配给temp。 temp中指定的最后一个值将是获得的最高标记。在第一个for循环之后,代码将是这样的。

    String winnerName = "";
    int temp = 0;
    int counter = 0;
    for(String name : names) {
        numbers = holderOfMarksArayList.get(counter);
        int sum = 0;
        for( int number : numbers ) {
            sum += number;
        }

        if( sum > temp ) {
            temp = sum;
            winnerName = name;
        }

        Collections.sort(numbers);
        int maxScore = numbers.get(numbers.size() - 1);
        int minScore = numbers.get(0);
        System.out.println(name +",  Max Score = " + maxScore + " Min Score = " + minScore +" Sum " + sum);
        counter++;
    }
    System.out.println("Winner " + winnerName + " Total "+ temp);