如何从文件中获取前4个整数。

时间:2014-09-25 10:18:32

标签: java arraylist stringtokenizer

我有一个文件,其中列出了名称,性别以及有多少人拥有该名称的计数。

示例:

阁楼,男,416

萨拉,F,800

伯纳德,男,413

杰西卡,F,1300

巴里,男,408

德里克,男,407

米切尔,男,407

拿但,男,404

我正在尝试获得名字数量最多的前4名,但我遇到了麻烦。我试过了,但它似乎没有用。我收不到符号错误。另外我想知道是否有更有效的方法来执行此功能,因为如果我必须找到更大文件的前10位,那么我正在做的方式可能会变得非常长。

    while(sc.hasNextLine())
    {

    // read a line from the input file via sc into line
        line = sc.nextLine();



        StringTokenizer stk = new StringTokenizer(line, ",");
        String name = stk.nextToken();
        char sex = stk.nextToken().charAt(0);
        int count = Integer.parseInt(stk.nextToken());


        OneName list = new OneName(name, sex, count);

        oneName.add(list);      


    }

    String many= oneName.get(0).toString();
    int a = oneName.get(0).getCount();
    for (int i = 0; i< oneName.size(); i++)
    {

        int b = oneName.get(i).getCount();
        int c = oneName.get(i).getCount();
        int d = oneName.get(i).getCount();
        String man= oneName.get(i).toString();
        if ( a < b)
        {
            a = b;
            b = a ;

        }
        if (b < c)
        {
            b = c; 
            c = b; 
        }
        if (c < d)
        {
            c = d;
            d = c;

        }

    }

    System.out.println(a+b+c+d);
    }

2 个答案:

答案 0 :(得分:2)

我不知道oneName的类型。如果是列表,您可以使用标准API中的Collections.sort()方法:

Collections.sort(oneName, new Comparator<OneName>()
    {
        public int compare(OneName o1, OneName o2)
        {
            return o2.getCount() - o1.getCount();
        }
    });

然后oneName的前4个元素将是计数最高的元素。

在您的代码中,只需通过上述Collections.sort()调用替换上一个循环。然后,您可以获得4个最高计数(您必须检查边界中的数组索引):

OneName a = oneName.get(0);
OneName b = oneName.get(1);
OneName c = oneName.get(2);
OneName d = oneName.get(3);

答案 1 :(得分:0)

在oneName中实现可比较的接口

public int compareTo(Object o)     {          int ont = this.get(i).getCount();         OneName oneName =(OneName)o;         int ont1 = oneName.get(i).getCount();         return ont&gt; ont1;     }

Collections.sort(onename); 检查比较方法中的计数,它将按顺序排序。 然后从列表中获取第一个元素。