计数方法Java

时间:2015-11-17 03:01:24

标签: java methods count names

我有一个名为input.txt的输入文件,其中包含一个名称列表。我可以使用显示和排序方法显示所有名称并按字母顺序排列它们。但我目前正在努力做的是创建一个方法,我可以计算文件中每个名称的重复。如果有人能帮助我,我会很感激,并找到一种方法来创建这种方法。

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;

}

public static void main(String[] args) throws IOException {

    ArrayList<String> first = new ArrayList<>();
    ArrayList<String> last = new ArrayList<>();
    getNames(first, last);
    capitalize(first);
    capitalize(last);

    ArrayList<String> allNames = new ArrayList<>();
    for (int i = 0; i < first.size(); i++) {
        allNames.add(last.get(i) + ", " + first.get(i));
    }
    System.out.println("*******All Names******");

    sort(allNames);
    display(allNames);

    System.out.println("*****First Name 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.");

}

    System.out.println("****Last Name Count****");

    sort(last);
    display(last);

}

}

2 个答案:

答案 0 :(得分:2)

对这些案例使用Map结构:

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);
}

答案 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;
}

要使用它,请浏览Main中的循环(或者您可以创建另一种方法)

for(int i =0; i <= first.size; i++){
    int count = countOccurence(first.get(i), first);
    System.out.println(first.get(i) + " occured " + count + " times.");
}