0

ネストされたループを使用して、別のユーザー入力検索語配列でテキストのユーザー入力配列を検索し、テキストに表示される回数と合計テキストの割合で検索語を出力しようとしています。私は正しい方向に進んでいると思います。私の問題は、if ステートメントが true になるたびにカウンターがリセットされないことです。私はプログラミングに非常に慣れていないため、完全に間違っている可能性があります。以下、プログラム全体です。誰かが見て、私の問題が何であるかを理解するために私に手を差し伸べることができれば、私は永遠に感謝します.

public class termFrequency {
    public static void main(String[] args) {

        String searchTextPeriod, searchTextComma, searchTextApostrophe, searchTextColon, searchTextExclamation, 
        searchTextQuestion, searchText, searchTerm;
        int counter=0, total, searchIndex=0, termIndex=0;
        double percentage=0.0;
        String [] searchArray, termArray;


        searchText = JOptionPane.showInputDialog("Enter a sentence that is at least 20 words long");

        //removes some common punctuation from the searchable text
        searchTextPeriod = searchText.replace(".", "");
        searchTextComma = searchTextPeriod.replace(",", "");
        searchTextApostrophe = searchTextComma.replace("'", " ");
        searchTextColon = searchTextApostrophe.replace(":", " ");
        searchTextExclamation = searchTextColon.replace("!", "");
        searchTextQuestion = searchTextExclamation.replace("?", "");

        searchArray = searchTextQuestion.split(" "); //splits the sentence and and puts it into an array

        total=searchArray.length;
        System.out.println("There are " +total +" words in your sentence");

        searchTerm = JOptionPane.showInputDialog("Enter your search terms here seperated by a space");
        termArray = searchTerm.split(" ");
        DecimalFormat two = new DecimalFormat("#0.00");

        boolean found = false;
        for (termIndex=0; termIndex<termArray.length; termIndex++) 
        {
            for (searchIndex=0; searchIndex<searchArray.length; searchIndex++) 

                if (termArray[termIndex].equalsIgnoreCase(searchArray[searchIndex]))
                {
                    counter++; 
                    found = true;

                    percentage= ((double) counter/(double)total) * 100;
                }
                if (found) 
                    System.out.println("Search word " + "\'" + termArray[termIndex] + "\' is found " +counter +" times. That is "+ two.format(percentage)+"% of the statement." );
                else  
                    System.out.println("Search word " + "\'" + termArray[termIndex] + "\' is not found in the statement.");

            }
        }
    }
}
4

2 に答える 2

0

"found" の if/else を内側のループから最初のループの最後に移動する必要があります。また、初期値を使用して termArray 内の各新しい単語の分析を開始するように、最初のループでブール値とカウンターをリセットする必要があります。

   for (termIndex=0; termIndex<termArray.length; termIndex++) 
    {
        counter=0; //Reset the counter for each word in termArray
        found=false; //Reset the "found" flag for each word in termArray
        for (searchIndex=0; searchIndex<searchArray.length; searchIndex++) 

            if (termArray[termIndex].equalsIgnoreCase(searchArray[searchIndex]))
            {
                counter++;
                percentage= ((double) counter/(double)total) * 100;

                found=true
                System.out.println("Search word " + "\'" + termArray[termIndex] + "\' is found " +counter +" times. That is "+ two.format(percentage)+"% of the statement." );
            }
        }
        if (found) 
                System.out.println("Search word " + "\'" + termArray[termIndex] + "\' is found " +counter +" times. That is "+ two.format(percentage)+"% of the statement." );
        else  
                System.out.println("Search word " + "\'" + termArray[termIndex] + "\' is not found in the statement.");

    }

ところで、「見つかった」var は実際には必要ありませcounter == 0searchArray

于 2012-07-08T09:47:58.170 に答える
0

found = false を最初のループ内に移動します。そうすれば、反復ごとに false にリセットされます。現在、これが true に変更された場合、残りのプロセスでは true のままです。

于 2012-07-08T05:16:45.380 に答える