在文本文件中找到最常用的名称

时间:2014-04-16 22:35:57

标签: java

我有这个家庭作业,我被困住了。

我必须在文本文件中找到每个行的最常用名称。如果存在平局,请使用具有多次出现次数的名字。如果所有名称都是唯一的,请在该行上打印第一个名称。

输入的文件: 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 + " ");              
}

}

希望有人可以帮助我提供指导,而不是结果。

2 个答案:

答案 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值以查看哪一个是最高的