- Счетчик символов - Массив - PullRequest
0 голосов
/ 21 сентября 2019

Разработайте программу, которая читает текстовый файл ASCII (предоставляется) по одному байту за раз и создает выходной файл, который содержит счетчик частоты появления каждого символа во входном файле.Не сортируйте вывод.Экземпляр класса символьной частоты должен использоваться для представления каждого уникального символа в файле (см. Ниже).Для этого упражнения объекты символьной частоты должны быть обработаны и сохранены с использованием массива.

Я попытался создать объект символьных частот и использовать метод равенства для сравнения его с входными данными.

массив должен хранить новые символы и частоту символов, но он также хранит дубликаты и частота не является точной.

public class CharacterFrequency {
//Stores character by character from input file to check if its in ASCII 
array
private static char character;
//Stores number of times character shows up in input file
private static int frequency = 0;
private static CharacterFrequency arr[] = new CharacterFrequency[256];
//Constructor class for CharacterFrequency
public CharacterFrequency(char character, int frequency){
    setCharacter(character);
    setFrequency(frequency);
}

public static void main(String[] args){
    //initiate object array to store character and frequency variables

        File file = new File("C:/Users/alber/Desktop/sample.txt");
        if (!file.exists()) {
          System.out.println(args[0] + " does not exist.");
          return;
        }
        if (!(file.isFile() && file.canRead())) {
          System.out.println(file.getName() + " cannot be read from.");
          return;
        }
        try {       

            FileReader fr = new FileReader("C://Users/alber/Desktop/sample.txt");               

                    //loop through character array 

                    for(int i = 0; i < arr.length; i++){
                    //read file character by character until no characters 
  are left and store character each time 

                    int j = 0;
                    while ((j=fr.read()) != -1){

                        character = (char)j;
                        //if character is in the array already do not add 
 it just call increment method                                      
                        //if(arr[i].equals(character)){ 
                        if(arr[i] == null || (! 
(arr[i].equals(character)))){
                            arr[i] = new 
  CharacterFrequency(character,frequency);
                            System.out.println(arr[i]);
                        //if character is not in the array add it to it  
                        }else{                                  
                            increment();    


                        }//end else   

                    }//end while

                    }//end for

             fr.close();                 
        } catch (IOException e) {
          e.printStackTrace();
        }

    }
public char getCharacter(){
    return character;
}

public static void setCharacter(char character){

}

public int getFrequency(){
    return frequency;
}

public void setFrequency(int frequency){
    this.frequency = frequency;
}

public static void increment(){
    frequency++;
}
@Override
public boolean equals(Object obj){

    if(obj == null || obj.getClass()!= this.getClass()){
    return false;
    }
    if(obj == this){
    return true;
    }

    CharacterFrequency c = (CharacterFrequency)obj;
    return CharacterFrequency.character == this.character && CharacterFrequency.frequency == this.frequency;
}

public String toString(){

    return character + " " + frequency;
}

}

1 Ответ

0 голосов
/ 21 сентября 2019

Вы создали массив в строке ниже.

CharacterFrequency arr[] = new CharacterFrequency[256];

В массив не добавлены элементы.Поэтому, когда вы обращаетесь к arr [j], объект, к которому вы обращаетесь, имеет значение null. При вызове equals в нулевом объекте вы получите исключение NullPointerException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...