因此,我正在编写一个程序,该程序读取文本文件(在本例中为“ votes.txt”),并返回字符串的数量,并将其从最频繁到最不频繁地排列。因此,使用votes.txt,输出应如下所示打印控制台:

1. Trump = 7
2. Hillary = 7
3. Bernie = 6
4. Jeb! = 5
5. Putin = 3
6. Colbert = 1
7. Stein = 1


我得到的错误是这些:

Error:(26, 29) java: non-static variable this cannot be referenced from a static context
Error:(21, 28) java: non-static variable this cannot be referenced from a static context


这是代码:

import java.io.FileNotFoundException;
import java.io.File;
import java.util.*;

public class Profile {

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("votes.txt");
        Scanner inFile = new Scanner(file);
        HashMap<String, Integer> map = new HashMap<>();
        String input = inFile.next();

        while(inFile.hasNext());{
            if(!map.containsKey(input)){
                map.put(input, 1);
            }
            else{
                map.put(input, map.get(input) + 1);
            }
        }
        Record[] records = new Record(map.size());
        Iterator<String> iterator = map.keySet().iterator();
        int index = 0;
        while(iterator.hasNext()){
            String key = iterator.next();
            Record record = new Record(key, map.get(key));
            records[index] = record;
            index++;
        }
        Arrays.sort(records, Collections.reverseOrder());
        for(int i = 0; i < 5; i++){
            System.out.println(records[i]);
        }
    }
    class Record implements Comparable<Record>{
        String key;
        int count;
        public Record(String key, int count){
            this.key = key;
            this.count = count;
        }
        public int compareTo(Record other){
            if(this.count < other.count){
                return -1;
            }
            else if (this.count > other.count){
                return 1;
            }
            else{
                return  0;
            }
        }
        public String toString(){
            return  "(" + key + ", " + count + ")";
        }
    }

}


这是votes.txt:

Bernie Trump Bernie Bernie
  Trump Trump Hillary

                Jeb!

Hillary Trump Bernie Hillary
   Bernie
Putin  Putin Putin
 Hillary
   Bernie
  Hillary Hillary Hillary Trump


  Colbert

               Jeb!     Jeb!
    Trump

          Johnson
                        Stein
 Jeb!  Jeb!


任何和所有解决方案都欢迎。感谢您的阅读!

最佳答案

如果您单击注释中的链接,您将看到Record classProfile的内部类,因此您不能从static上下文访问它,因为它是non-static。解决此问题的最佳方法是将class Record移到class Profile之外。

编辑:
按照大卫·康拉德(David Conrad)在评论中的说法,您可以使该类静态化并将其保留为内部类,但我不建议这样做。我不想提及它,因为我不建议这样做,但大卫是对的,出于完整性考虑,应该提及

关于java - 我正在尝试解析一个文本文件以计算唯一字符串的数量,并打印一些有关这些字符串的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59313883/

10-10 04:13