Java Setter and Getter

271 views Asked by At

I am trying to get the GETTER of "FileHandler.java" to return the value(final_match) to "main.java" and out put. Problem is that final_match outputs as 0. In "FileHandler.java" Outside of my getter final_match has the correct value, but when called/returned from the GETTER value is plain 0

main.java

package textreader;

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class main {

public String data = "";

public static void main(String[] args) {

    Scanner user_input = new Scanner(System.in);
    final File directory = new File("E:\\test\\filename.txt");
    //  final File directory2 = new File("E:\\test\\filename2.txt");
    ArrayList<File> f = new ArrayList<>();
    f.add(directory);
    //  f.add(directory2);
    final String words;

    System.out.println("The word you would like to search for. ");
    System.out.println("----------------------------------------");
    words = user_input.next();

    main aMain = new main(f, words);

}

main(ArrayList<File> f, String words) { //constructor 
    ArrayList<FileHandler> threadArray = new ArrayList<>();//arraylist of type filehandler
    for (File file : f) {
        FileHandler fh = new FileHandler(this, words, file);// instance of filehandler = fh
        threadArray.add(fh);
        fh.start();

        for (FileHandler x : threadArray) {
            if (x.isFinished()) {
                x.setFinished(true);
                synchronized (x) {
                    x.notify();// notify next thread to continue

                }
            }

            int answer = x.getfinal_match(); // CALLING THE GETTER FOR VALUE
            System.out.println("----------------------------------------");
            System.out.println("this word has appeared: " + answer + " times.");
            System.out.println("----------------------------------------");

        }
    }
}
}

FileHander.java

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class FileHandler extends Thread {

BufferedReader br = null;
FileReader fr = null;
String words;
File file;
int counter;
int match;
int final_match;
boolean done = true;
boolean finished;
private final main main;

public FileHandler(main instance, String words, File file) { //constructor
    this.words = words;
    this.file = file;
    this.main = instance;
}

@Override
public synchronized void run() {
    try {
        fr = new FileReader(this.file);//file path
        br = new BufferedReader(fr);// reads the words in the file
        String theLine;

        while ((theLine = br.readLine()) != null) {
            String List[] = theLine.split(" ");
            for (String List1 : List) {
                if (List1.equals(List[counter])) {// of words are the same as "word" increment match
                    match++; //Amount of occurrences
                }

                counter++;//loop through each word

            }

            synchronized (this) {
                //System.out.println("test2 " + match);
                this.finished = true;
            }
        }
    } catch (IOException e) {
    } finally {
        try {
            if (br != null) {
                br.close();
            }
            if (fr != null) {
                fr.close();
            }
        } catch (IOException ex) {
        }
    }

    final_match = match;

    System.out.println("testing  " + final_match); // THIS TEST WORKS AS VALUE WAS OUTPUTTED AS 5
}

public void setfinal_match(int test) {

    final_match = test;

}

public Integer getfinal_match() {

    System.out.println("testing  123456 " + final_match); // THIS VALUE DOES NOT WORK AS IT OUTPUTS A BIG FAT 0
    return final_match;
}

public boolean isFinished() {
    return this.finished;
}

public void setFinished(boolean finished) {
    this.finished = finished;

}

}

//OUTPUT  
//run:  
//the word you would like to search for.   
//----------------------------------------  
//dog  
//testing GETTER 123456 0  
//----------------------------------------  
//this word has appeared: 0 times.  
//----------------------------------------  
//testing  5  
//BUILD SUCCESSFUL (total time: 2 seconds)  




//EXPECTED OUTPUT  
//run:  
//The word you would like to search for.   
//----------------------------------------  
//dog  
//testing GETTER 123456 5  
//----------------------------------------
//this word has appeared: 5 times. (THIS IS THE MAIN VALUE THAT HAS TO CHANGE)  
//----------------------------------------  
//testing  5  
//BUILD SUCCESSFUL (total time: 2 seconds)  
1

There are 1 answers

1
rob On

Your final_match is 0 at the time of the output, since the thread starts and is not finished yet, when you output the value of final_match.