排序得分最高的ArrayList

时间:2014-09-25 04:34:42

标签: java sorting arraylist

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

public class Assignment5
{
    public static void initialize(ArrayList<String> names, ArrayList<Integer> scores)
    {
       // Create a Scanner object for keyboard input.
       Scanner keyboard = new Scanner (System.in);

       // Ask the user for the names and scores for 5 people.
       System.out.println("Enter the name for score #1: ");
       names.add(keyboard.next());
       System.out.println("Enter the score for score #1: ");
       scores.add(keyboard.nextInt());
       System.out.println("Enter the name for score #2: ");
       names.add(keyboard.next());
       System.out.println("Enter the score for score #2: ");
       scores.add(keyboard.nextInt());
       System.out.println("Enter the name for score #3: ");
       names.add(keyboard.next());
       System.out.println("Enter the score for score #3: ");
       scores.add(keyboard.nextInt());
       System.out.println("Enter the name for score #4: ");
       names.add(keyboard.next());
       System.out.println("Enter the score for score #4: ");
       scores.add(keyboard.nextInt());
       System.out.println("Enter the name for score #5: ");
       names.add(keyboard.next());
       System.out.println("Enter the score for score #5: ");
       scores.add(keyboard.nextInt());
    } 

    public static void sort(ArrayList<String> names, ArrayList<Integer> scores)
    {
    }

    public static void display(ArrayList<String> names, ArrayList<Integer> scores)
    {
       for (int index = 0; index < names.size(); index++)
       {
          String userNames = names.get(index);
          System.out.println(names.get(index));
       }

       for (int index = 0; index < scores.size(); index++)
       {
          Integer userScores = scores.get(index);
          System.out.println(scores.get(index));
       }
    }

    public static void main(String[] args)
    {
       // Create an ArrayList for names and scores.
       ArrayList<String> names = new ArrayList<String>();
       ArrayList<Integer> scores = new ArrayList<Integer>();

       // Call the three methods.
       initialize(names, scores);
       sort(names, scores);
       display(names, scores);
    }
}

编写一个程序,记录虚构游戏的高分数据。该程序将要求用户输入五个名称和五个分数。它会将数据存储在内存中,然后按分数打印出来。

程序的输出应该大致如下:

输入得分#1的名称:Suzy

输入得分#1的分数:600

输入得分#2的名称:Kim

输入得分#2得分:9900

输入得分#3的名称:Bob

输入得分#3得分:1012

输入得分#4的名称:Armando

输入得分#4的分数:8000

输入得分#5的名称:Tim

输入得分#5的得分:514

热门得分手:

金:9900

Armando:8000

鲍勃:1012

Suzy:600

蒂姆:514

要求

数据必须存储在两个ArrayLists中:一个名为names的字符串ArrayList和一个名为scores的整数ArrayList。必须在main方法中声明这些ArrayLists。

所有用户输入都应该在名为InitializeArrays的方法中完成。它应该有以下签名:

public static void InitializeArrays(ArrayList names,ArrayList scores)

您应该编写一个函数,根据得分数组列表中的值对两个数组列表进行排序。这是作业中更具概念性的部分之一。您希望对得分数组列表进行排序,同时更改名称数组列表,以便名称继续按索引与各自的得分对齐。在上面的示例数据中,当得分9900移动到得分数组列表的第一个元素时,名称“Kim”也应该移动到名称数组列表的顶部。该函数应具有以下签名:

public static void sort(ArrayList names,ArrayList scores)

最后,您应该编写一个显示两个数组列表内容的方法。它应该有以下签名:

public static void display(ArrayList names,ArrayList scores)

主要方法应该很短。它应该只声明并初始化两个数组列表,然后调用这三个方法。

.......截至目前,我只创建了两个arraylists,可以存储名称和分数。我不确定如何正确排序和显示它们。我注意到人们已经为类似的情况创建了比较器,但我们还没有在课堂上介绍过。

1 个答案:

答案 0 :(得分:1)

尝试使用Map我认为您可以轻松实现目标

Map<String,Integer>以字符串形式存储名称并以整数得分,并使用比较器

对它们进行排序
Set<Entry<String,Integer>> s=yourMap.entrySet();
    List<Entry<String,Integer>> l=new ArrayList<Entry<String,Integer>>(s);
    Collections.sort(l,new Comparator<Map.Entry<String, Integer>>() {

        @Override
        public int compare(Entry<String, Integer> arg0,
                Entry<String, Integer> arg1) {

            return (arg0.getValue().compareTo(arg1.getValue()));
        }

    });

以下代码将完全满足您的要求,只需在您的日食中复制并运行它

    import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class Sample
{


    public static void main(String[] args)
    {
        Map<String,Integer> dataMap=new HashMap<String, Integer>();
         Scanner keyboard1 = new Scanner (System.in);
         Scanner keyboard2 = new Scanner (System.in);

         // Ask the user for the names and scores for 5 people.

         for(int i=1;i<=5;i++)
         {
         System.out.println(i+". Enter the name ");
         String name= keyboard1.next();
         System.out.println(i+". Enter the score");         
         int score=keyboard2.nextInt();
         dataMap.put(name, score);
         }


         Set<Entry<String,Integer>> s=dataMap.entrySet();
            List<Entry<String,Integer>> l=new ArrayList<Entry<String,Integer>>(s);
            Collections.sort(l,new Comparator<Map.Entry<String, Integer>>() {

                @Override
                public int compare(Entry<String, Integer> arg0,
                        Entry<String, Integer> arg1) {

                    return (arg1.getValue().compareTo(arg0.getValue()));
                }

            });

            for(Map.Entry<String, Integer> entry:l){
                System.out.println("Name of Student== "+entry.getKey()+"  and his Score=="+entry.getValue());
            }
    }

    }

注意:如果您对答案感到满意,请进行投票并接受答案