我有一个程序从输入文件(input.txt)中获取名称列表,并按字母顺序正确显示它们。我现在要做的是计算所有时间每个名字和名字出现在文件中并显示该计数。我有一个countOccurrence
方法,以及我如何尝试在下面的代码中显示的main方法中使用它。该方法一直给我错误,我需要帮助尝试修复它,以便我可以运行该程序并使用它来计算。如果有人能帮助我,我真的很感激。
{
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);
}
在方法中,它在for循环中给出错误&#34; size在ArrayList&#34;中具有私有访问权限。然后在函数调用的main方法中,它给出了另一个错误说&#34;非静态方法不能从静态上下文中引用&#34;。
答案 0 :(得分:0)
您在for循环中使用first.size
。由于您使用的是List,因此必须使用ArrayList的first.size()
方法
您的第二个问题是从静态主方法调用private int countOccurence()
,这意味着您必须将其设为private static int countOccurence()
当在类的所有实例之间共享方法/变量并且不依赖于类的任何特定实例时,使用static
关键字。在这种情况下,它只需要输入并提供输出,因此它可能是static
,以及其他方法
你的IndexOutOfBoundsException
是由一个错误引起的,你在for循环中读得太远了
在你的countOccurence
方法中,你的for循环太过分了,改变了
for(int i = 0; i <= names.size; i++)
到
for(int i = 0; i < names.size(); i++)
或者你可以使用foreach循环而不必处理计数器,而不是冒险超出范围
private static int countOccurence(String name,ArrayList<String> names)
{
int count = 0;
for(String s : names)
if(name.equalsIgnoreCase(s))
count++;
return count;
}