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