繁体   English   中英

Java文本分析程序

[英]Java text analysis 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);

    }

我的程序应该在逻辑上正确,因为我编写它并在上周成功运行了一段时间,但与此程序的区别(这不起作用)是我必须对分析的每个组件使用单独的方法,这不应该'考虑到程序之前的工作是太困难了所以我自然会尝试拆分我的程序,这样我可以调用我的第一个方法(我称之为启动),然后我的第二个和第三个方法称为处理和输出。

首先, static真正意味着什么? 我记得我的老师说它代表了一个全局变量,我可以在程序的任何地方使用它。 正如您所看到的,我将每个变量都更改为static以使我的任务更容易。

另外,如果我要改变一些东西,我是否真的需要使用返回的public static + type?

假设我想更改数组的值(就像我在程序中使用并使用public static void)我是否需要返回实际更改数组值的内容或者是否可以使用public static void?

如果有人对我的方法有任何一般指示,我会非常感激。

您的问题在于您的initiate方法:

return values;
processing(values);

一旦调用return ,您的方法就会停止。 如果您正在使用Eclipse(我强烈推荐),那么您应该收到错误消息“无法访问的代码”,因为程序无法执行您的processing方法。

我也在你的output方法中看到了这个缺陷。

首先, static真正意味着什么? 我记得我的老师说它代表了一个全局变量,我可以在程序的任何地方使用它。 正如您所看到的,我将每个变量都更改为static以使我的任务更容易。

这取决于具体情况。 这里有一个很好的整体描述 应用于方法,字段和类时,含义不同。 说它使变量“全局”有点简化。

另外,如果我要改变一些东西,我是否真的需要使用返回的public static + type?

我对你的意思有点困惑。 声明为public static *return_type*具有三个独立的独立特性:

  • public :任何其他类都可以访问它。
  • static :它不需要类的实例来运行(参见上面的链接)。
  • *return_type* :这当然是返回类型。

这些属性与“改变某些东西”并不真正相关。 除非我误解你的问题,答案是:不,方法说明符和返回类型对其改变的东西,不同的是能力没有影响, static方法不能修改非static字段或调用非static的方法, this (有在static方法中没有this )。

假设我想更改数组的值(就像我在程序中使用并使用public static void)我是否需要返回实际更改数组值的内容或者是否可以使用public static void?

功能上做的是完全独立的访问说明符和static它-ness(与上述不同的是this不存在static方法)。 如果你的函数有任何副作用,如更改数组中的值(或任何值),那么无论是publicstatic还是返回类型,它都会执行此操作。

查看官方语言教程的“ 更多课程”部分。 它简明扼要,写得很好,应该有助于您理解您所询问的一般概念。 如果您愿意,还可以查看其他一些教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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