我正在尝试解析文本文件以计算唯一字符串的数量并打印一些有关那些字符串的信息

问题描述 投票:0回答:1

因此,我正在编写一个程序,该程序读取文本文件(在本例中为“ 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!

欢迎任何解决方案。谢谢您的阅读!

java file maps voting
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.