我有一个文件,其中列出了名称,性别以及有多少人拥有该名称的计数。
示例:
阁楼,男,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);
}
答案 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); 检查比较方法中的计数,它将按顺序排序。 然后从列表中获取第一个元素。