计数方法Java

计数方法Java,java,methods,count,names,Java,Methods,Count,Names,我有一个名为input.txt的输入文件,其中有一个名称列表。我可以用display和sort方法显示所有名称并按字母顺序排列。但我目前正在努力创建一个方法,在这个方法中,我可以计算文件中每个名称的重复次数。如果有人能帮我解决这个问题,并找到一种创建这个方法的方法,我将不胜感激 public class Names { public static void display(ArrayList<String> names) { for (int i = 0; i < n

我有一个名为input.txt的输入文件,其中有一个名称列表。我可以用display和sort方法显示所有名称并按字母顺序排列。但我目前正在努力创建一个方法,在这个方法中,我可以计算文件中每个名称的重复次数。如果有人能帮我解决这个问题,并找到一种创建这个方法的方法,我将不胜感激

public class Names {

public static void display(ArrayList<String> names) {
    for (int i = 0; i < names.size(); i = i + 1) {
        System.out.println(names.get(i));
    }
}

public static int find(String s, ArrayList<String> a) {
    for (int i = 0; i < a.size(); i = i + 1) {
        String str = a.get(i);
        if (str.equals(s)) {
            return i;
        }
    }
    return -1;

}

public static void capitalize(ArrayList<String> names) {
    for (int i = 0; i < names.size(); i = i + 1) {
        String name = names.get(i);
        if (!name.isEmpty()) {
            String firstLetter = "" + name.charAt(0);
            names.set(i, firstLetter.toUpperCase() + name.substring(1).toLowerCase());

        }
    }
}

public static void sort(ArrayList<String> names) {
    for (int i = 0; i < names.size() - 1; i = i + 1) {
        int Min = i;
        for (int j = i + 1; j < names.size(); j = j + 1) {
            if (names.get(j).compareTo(names.get(Min)) < 0) {
                Min = j;
            }
        }
        String tmp = names.get(i);
        names.set(i, names.get(Min));
        names.set(Min, tmp);

    }

}

public static void getNames(ArrayList<String> fn, ArrayList<String> ln) throws IOException {
    Scanner kb = new Scanner(System.in);
    System.out.println("What is the input flie?");
    String names = kb.next();
    File inpFile = new File(names);
    Scanner in = new Scanner(inpFile);

    while (in.hasNext()) {
        String firstName = in.next();
        String lastName = in.next();
        fn.add(firstName);
        ln.add(lastName);

    }

}

private int countOccurence(String name, ArrayList<String> names){
 int count = 0;
 for(int i =0; i <= names.size; i++){
    if(name.equalsIgnoreCase(names.get(i))){
        count++;
    }
 }
 return count;

}

在这些情况下使用地图结构:

Map<String, Integer> recurence = new HashMap<>();
int count;
for (String name : names) {
    if (recurence.containsKey(name)) {
        count = recurence.get(name) + 1;
    } else {
        count = 1;
    }
    recurence.put(name, count);
}
Map recurence=newhashmap();
整数计数;
for(字符串名称:名称){
if(引用容器(名称)){
count=recurence.get(name)+1;
}否则{
计数=1;
}
重复。放置(名称、计数);
}

创建一个统计发生次数的方法:

public static int countOccurence(String name, ArrayList<String> names){
     int count = 0;
     for(int i =0; i <= names.size(); i++){
        if(name.equalsIgnoreCase(names.get(i))){
            count++;
        }
     }
     return count;
}

您是否需要对每个姓名进行单独计数,还是需要对姓名进行输入以进行计数?他们提出了不同的解决方案。我发布了我所有的方法和我到目前为止的主要方法,我知道我必须使用find方法,或者至少我应该使用find方法。但是我不知道如何将它改为count,因为现在它只给我每个名字第一次出现在列表中的位置的索引。我认为最好创建一个方法
private int countoccurrence(String name)
,该方法将名字或姓氏作为参数,并返回出现的次数。遍历循环并计算它们。因此,我会在main中为每个名称使用它,还是作为每次在main中调用的方法?很抱歉,如果这是一个愚蠢的问题,但我仍然是一个初级程序员。是的,有了这个,你可以构建一个数据结构,比如key是名称,value是重复次数,所以你可以根据每个name on demand获得重复时间这是一个更好的解决方案,因为你只需要在名称上迭代一次,插入速度很快。O(n)表示迭代,O(1)表示put/getI创建了该方法,并尝试将您为我提供的内容放在主方法中,但它一直在主方法中给我一个错误,即我必须创建一个方法countoccurrence,即使我已经有了一个。你知道我为什么会遇到这个问题吗?根据你给我的方法,我必须创建一个字符串,然后根据参数创建数组列表,但是我会在我创建的字符串中放入什么?对不起,我忘记了在方法调用中包含
Arraylist
<代码>countoccurrence(first.get(i),first)已编辑。在旁注中,您应该将
Arraylist
重命名为告诉您这是一个列表的内容,例如
firstNames
告诉您这是一个名字列表。我使用您提供的内容更新了代码,但程序不会运行。在该方法中,它在for循环中给出了一个错误,即“size在ArrayList中具有私有访问权”。然后在函数调用的main方法中,它给出了另一个错误,即“不能从静态上下文引用非静态方法”。你知道我能做些什么让它运行吗?
Map<String, Integer> recurence = new HashMap<>();
int count;
for (String name : names) {
    if (recurence.containsKey(name)) {
        count = recurence.get(name) + 1;
    } else {
        count = 1;
    }
    recurence.put(name, count);
}
public static int countOccurence(String name, ArrayList<String> names){
     int count = 0;
     for(int i =0; i <= names.size(); i++){
        if(name.equalsIgnoreCase(names.get(i))){
            count++;
        }
     }
     return count;
}
for(int i =0; i <= first.size; i++){
    int count = countOccurence(first.get(i), first);
    System.out.println(first.get(i) + " occured " + count + " times.");
}