我有这个家庭作业,我被困住了。
我必须在文本文件中找到每个行的最常用名称。如果存在平局,请使用具有多次出现次数的名字。如果所有名称都是唯一的,请在该行上打印第一个名称。
输入的文件: Benson Eric Eric Kim Kim Kim Jenny Nancy Nancy Paul Paul Ethan Jamie Jamie Alyssa Alyssa Helene Helene Jessica Jessica。
结果: 最常见的是:金 最常见的是:杰米
这是我从我的代码中得到的:Paul和Jessica。
我需要保留重复名称的次数,但不能看到我想念的内容。
这是我一直在尝试的代码。
public static void mostCommonNames(Scanner input)
{
int count = 0;
int countName = 0;
while(input.hasNextLine())
{
String commonName = "";
String commonName1 = "";
String line = input.nextLine();
Scanner token = new Scanner(line);
while(token.hasNext())
{
String name = "";
int max = 0;
int longCurrent = 0;
int i = 0;
String tokenName = token.next();
if(tokenName.equals("Benson") || tokenName.equals("Eric") ||
tokenName.equals("Kim") || tokenName.equals("Jenny") ||
tokenName.equals("Nancy") || tokenName.equals("Paul") ||
tokenName.equals("Ethan") || tokenName.equals("Jamie") ||
tokenName.equals("Alyssa") || tokenName.equals("Helene") ||
tokenName.equals("Jessica"))
{
count++;
}
if(commonName.equals(tokenName))
{
countName++;
if(i < countName)
{
longCurrent = i;
}
}
if(max < count)
{
commonName = tokenName;
}
}
System.out.print(commonName + " ");
}
System.out.print(countName + " ");
}
}
希望有人可以帮助我提供指导,而不是结果。
答案 0 :(得分:1)
您可以维持Map<String, int> NameCount = new HashMap<String, int>();
最初为所有人分配密钥0
。之后,只需在地图中为每个重复的名称增加键值。
while(token.hasNext())
{
String name = token.next();
int count = NameCount.containsKey(name) ? NameCount.get(name) : 0;
NameCount.put(name, count + 1);
}
之后只需打印具有最高键值的名称或您想要的任何方式。 如果您不想使用HashMap,那么您还可以维护一个整数数组,其中每个元素都包含每个不同名称的计数。
int NameCount[]=new int[TOTAL_NUMBER_OF_DISTINCT_NAMES];//array should be initialized to 0
while(token.hasNext())
{
String name = token.next();
NameCount[INDEX_ASSOCIATED_TO_NAME]++;
}
小心只增加与特定名称关联的索引值, 休息是一样的。我认为它足够......
答案 1 :(得分:0)
如果名称的总数总是相同,则可以为每个名称添加一个int值。如果它找到与您设置的int值对应的名称,则等待+1,在扫描所有名称后比较int值以查看哪一个是最高的