Search code examples
javarecursionreturntry-catch

finding the number of occurrences for a specific char using recursion


This code below is part of a program, that will find the number of occurrences of the input character in a text file

public static void main(String[] args){
    [...]
    java.io.File file1=new java.io.File(dirPath1);
    FileInputStream fis = new FileInputStream(file1);
    System.out.println("  return "+rec(sc.next().charAt(0),fis));
}



public static int rec (char ch, FileInputStream fis)throws IOException{
    char current=0;
    if(fis.available()==0){
        return 0;
    }
    if(fis.read()!=-1){
        current = (char) fis.read();
    }

    if(current==ch) {     
        return 1+rec(ch,fis);
    }else
        return rec(ch,fis);
    }
} 

The problem is:

If the file has one character, and ch=that one character. it returns 0, when I traced the code I found that it doesn't enter if(current==ch). Although, they are the same char.

if there is more than on character,strings some of them-the matches chars- will enter if block and others won't. How can I fix this ?

Is there another way to find the number of occurrences recursively ?

another question: should I use try and catch in rec method to catch IOException ?

Thanks in advance

P.S. this program is from assignment,I have to use recursion and compare it with iteration.


Solution

  • you call fis.read() twice first one read first character and second one read nothing

    this is your answer

    public static int rec(char ch, FileInputStream fis) throws IOException {
    
        char current = 0;
        if (fis.available() == 0) {
            return 0;
        }
        int read = fis.read();
        if (read != -1) {
            current = (char) read;
        }
    
        if (current == ch) {
    
            return 1 + rec(ch, fis);
        }
    
        else
            return rec(ch, fis);
    
    }