简体   繁体   中英

Java text analysis program

The following requisites are those for the program I'm currently having an issue with:

The program must be able to open any text file specified by the user, and analyze the frequency of verbal ticks in the text. Since there are many different kinds of verbal ticks (such as "like", "uh", "um", "you know", etc) the program must ask the user what ticks to look for. A user can enter multiple ticks, separated by commas.

The program should output:

  • the total number of tics found in the text
  • the density of tics (proportion of all words in the text that are tics)
  • the frequency of each of the verbal tics
  • the percentage that each tic represents out of all the total number of tics

Here is my program:

public class TextfileHW2 {

    // initiate(
    public static int[] initiate(int[] values){

        for (int z=0; z<keys.length; z++){
            values[z] = 0;
        }
        return values;
        processing(values);
    }

    // processing(values)
    public static int[] processing(int[] valuez){
        while (input.hasNext()){
            String next = input.next();
            totalwords++;
            for (int x = 0; x<keys.length; x++){
                if (next.toLowerCase().equals(keys[x])){
                    valuez[x]+=1;

                }
            }
            return valuez;
            output();
        }

        for (Integer u : valuez){
            totalticks += u;
        }
    }

    public static void output(){

        System.out.println("Total number of tics :"+totalticks);
        System.out.printf("Density of tics (in percent): %.2f \n", ((totalticks/totalwords)*100));

        System.out.println(".........Tick Breakdown.......");

        for (int z = 0; z<keys.length; z++){
            System.out.println(keys[z] + "      /  "+ values[z]+" occurences   /"  + (values[z]*100/totalticks) + "% of all tics");

        }

        sc.close();
        input.close();
    }



    public static void main(String[] args) throws FileNotFoundException {

        static double totalwords = 0; // double so density (totalwords/totalticks) returned can be double
        static int totalticks = 0;
        System.out.println("What file would you like to open?");
        static Scanner sc = new Scanner(System.in);
        static String files = sc.nextLine();
        static Scanner input = new Scanner(new File(files));

        System.out.println("What words would you like to search for? (please separate with a comma)");
        static String ticks = sc.nextLine(), tics = ticks.toLowerCase();
        static String[] keys = tics.split(",");
        static int[] values = new int[keys.length];
        initiate(values);

    }

My program should be logically right as I wrote it and successfully ran it for a while last week, but the difference with this one (which doesn't work) is that I must use separate methods for each component of the analysis, which shouldn't be too difficult a task considering the program was working before So I naturally tried to split up my program such that I can call my first method (which I called initiate) then my 2nd and 3rd methods called processing and output.

First of all, what does static really mean? I remember my teacher saying that it represents a global variable which I can use anywhere in the program. As you can see I changed every variable to static to perhaps make my task easier.

Also, do I strictly need to use public static + type returned if I'm going to change something?

Let's say I want to change the values of an array (like I do in my program and use public static void) do I need to return something to actually change the values of the array or is it ok to use public static void?

If anyone also has any general pointers for what concerns my methods I would really appreciate it.

Your problem is in your initiate method:

return values;
processing(values);

Once you call return , your method stops. If you are using Eclipse (which I highly recommend), you should have gotten an error saying "Unreachable code," because there is simply no way for the program to execute your processing method.

I also saw this flaw in your output method.

First of all, what does static really mean? I remember my teacher saying that it represents a global variable which I can use anywhere in the program. As you can see I changed every variable to static to perhaps make my task easier.

It depends on the context. There is a good overall description here . The meaning is different when applied to methods, fields, and classes. To say it makes variables "global" is a bit simplified.

Also, do I strictly need to use public static + type returned if I'm going to change something?

I'm a little confused about what you mean. A method declared as public static *return_type* has three separate, independent qualities:

  • public : It is accessible by any other class.
  • static : It does not require an instance of the class to function (see above link).
  • *return_type* : This is, of course, the return type.

These properties aren't really related to "changing something". Unless I misunderstood your question, the answer is: No, the method specifiers and return type have no impact on its ability to change something with the exception that static methods cannot modify non- static fields or call non- static methods of this (there is no this in static methods).

Let's say I want to change the values of an array (like I do in my program and use public static void) do I need to return something to actually change the values of the array or is it ok to use public static void?

What you do in the function is entirely independent of the access specifier and static -ness of it (with the above-mentioned exception that this does not exist in static methods). If your function has any side-effects like changing the values in an array (or any values for that matter), then it does it regardless of public , or static , or its return type.

Check out the More on Classes section of the official language tutorial. It is concise and well-written and should help complete your understanding of the general concepts you're asking about. Check out some of the other tutorials there as well if you'd like.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM