簡體   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