使用分隔符对数组列表进行排序

时间:2014-04-04 01:52:08

标签: java arrays sorting arraylist delimiter

我一直坚持这个问题很长时间,我不知道该怎么做。 基本上我有一个文本文件,其中包含人名,然后是学号,然后奖金如下:

Green%3243%1000
Kevin%7657%400
Frank%345%10000
Bob%5435%5000
Stefan%31231%1000
Javis%4532%100
IronMan%5435%2000
Lamp%534%3000

我想要做的是根据最后一个数字对数组进行排序。

我试过这种可憎的事情(不要把它读成垃圾):

    boolean flag = true;
    String temp;
    int temp1;
    int temp2;

    while (flag){
        flag = false;
        for(int j=0;  j < list.size() -1;  j++ ){
            System.out.println(list.get(j));
            Scanner s = new Scanner(list.get(j)).useDelimiter("%");
            s.next();
            s.next();
            temp1 = s.nextInt();
            Scanner s2 = new Scanner(list.get(j+1)).useDelimiter("%");
            s2.next();
            s2.next();
            temp2 = s2.nextInt();
            if (temp1 < temp2){
                temp = list.get(j);
                list.add(j, list.get(j+1));
                list.add(j+1,temp);
                flag = true;
            } 
        } 
    }

但它只是无限循环。我虽然在制作它时只是将数组列表修补为冒泡排序。

如果有任何想法并愿意分享,我们将不胜感激。

3 个答案:

答案 0 :(得分:1)

这是让你开始的东西。

  1. 为奖金创建地图=&gt;作为键/值对的行
  2. 读取文件中的每一行,解析它并将键/值对放在上面的地图中
  3. 地图准备就绪后,将密钥条目集转换为集合,如列表
  4. 使用Collections.sort()
  5. 对集合进行排序
  6. 迭代创建的地图,并为集合中的每个值从地图中获取相应的值。
  7. 希望这有助于您获得工作流程。

答案 1 :(得分:1)

Java是一种面向对象的语言,所以我只使用对象:

  • 创建一个Student对象,其中包含您要存储的三个值(以及一个toString()方法,用&#34;%&#34;

    分隔打印它们
    public class Student {
        private final String name;
        private final int number;
        private final int prizeMoney;
    
        public Student(final String name, final int number, final int prizeMoney) {
            this.name = name;
            this.number = number;
            this.prizeMoney = prizeMoney;
        }
    
        @Override
        public String toString() {
            return name+"%"+number+"%"+prizeMoney;
        }
    
        public int getPrizeMoney() {
            return prizeMoney;
        }
    }
    
  • 将您的行读作Student个对象,并将其存储在List

    final Scanner scan = new Scanner(new File("/path/to/StudentsList"));
    final List<Student> students = new ArrayList<Student>();    
    
    while (scan.hasNextLine()) {
        final Scanner line = new Scanner(scan.nextLine());
        line.useDelimiter("%");
    
        students.add(new Student(line.next(), line.nextInt(), line.nextInt()));
    
        line.close();
    }
    scan.close();
    
  • 使用自定义List订购Comparator,然后将其打印出来:

    students.sort(new Comparator<Student>() {
        @Override
        public int compare(final Student s1, final Student s2) {
            return s1.getPrizeMoney()-s2.getPrizeMoney();
        }
    });
    
    for (final Student student: students)
        System.out.println(student);
    

<强>输出

Javis%4532%100
Kevin%7657%400
Green%3243%1000
Stefan%31231%1000
IronMan%5435%2000
Lamp%534%3000
Bob%5435%5000
Frank%345%10000

答案 2 :(得分:0)

我认为在这里创建一个3d数组这个数组中从右到左的8x8x8是row,col和in,因此[0] [0] [1]是块1或kevin [0] [1] [1]是7657 [1] [1] [1]是400.我喜欢这种方式,因为它不仅为每个“项目”提供了一个数组,它还允许您保持组织和易于访问