【问题标题】:Java text analysis programJava文本分析程序
【发布时间】:2014-03-25 05:51:48
【问题描述】:

以下是我目前遇到问题的程序的必备条件:

程序必须能够打开用户指定的任何文本文件,并分析文本中的口头滴答频率。由于有许多不同种类的口头记号(例如“like”、“uh”、“um”、“you know”等),程序必须询问用户要查找的记号。用户可以输入多个刻度,以逗号分隔。

程序应该输出:

  • 在文本中找到的抽动总数
  • 抽动的密度(文本中抽动的所有单词的比例)
  • 每种语言抽动的频率
  • 每个抽动在所有抽动总数中所占的百分比

这是我的程序:

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 + 返回类型?

假设我想改变一个数组的值(就像我在我的程序中做的那样并使用 public static void)我需要返回一些东西来实际改变数组的值还是可以使用 public static void ?

如果有人对我的方法有什么一般性的指导,我将不胜感激。

【问题讨论】:

  • 你知道这句话中是否有“勾号”?您将需要某种方法来检测“勾号”词的哪些用法类似于那些常规用法,哪些以错误的方式使用。
  • @spacesick 如果有帮助请接受答案

标签: java text input


【解决方案1】:

您的问题出在您的initiate 方法中:

return values;
processing(values);

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

我还在您的 output 方法中看到了这个缺陷。

【讨论】:

  • 是的,我知道你从哪里来,但不是因为它堆叠而再次调用该方法吗?
  • return 表示return。就是这样,完成了,您的方法在该点停止并返回该值。在方法中的该语句之后没有任何内容被执行。我链接到的教程超过了return。 +1 使用 Eclipse 之类的 IDE。
【解决方案2】:

首先,static 的真正含义是什么?我记得我的老师 说它代表一个全局变量,我可以在任何地方使用 在节目中。如您所见,我将每个变量都更改为static 也许让我的任务更轻松。

这取决于上下文。 There is a good overall description here。当应用于方法、字段和类时,含义是不同的。说它使变量“全局”有点简化。

另外,如果我要更改某些内容,我是否严格需要使用 public static + 返回的类型?

我对你的意思有点困惑。声明为 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 或其返回类型如何,它都会执行此操作。

查看官方语言教程的More on Classes 部分。它简明扼要,写得很好,应该有助于您完成对您所询问的一般概念的理解。如果您愿意,也可以查看那里的其他一些教程。

【讨论】:

  • 谢谢你是明星!
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2011-04-22
  • 1970-01-01
相关资源
最近更新 更多