0

Scanner メソッドを使用してテキスト ファイルを読み取り、出力するプログラムを作成しています: 単語数、文数、1 文あたりの平均単語数、最長文と最短文。これまでのところ、最長文と最短文以外はすべて揃っていますが、それらを理解できないようです。これが私がこれまでに持っているものです...

import java.util.Scanner;
import java.io.*;
import java.io.IOException;
public class TestScanner {
  public static void main(String args[])
  {     Scanner in = new Scanner(System.in);
        String x = in.next();
        double count=0;
        int nbSentences = 0;
        while(in.hasNext())
        {   String word = in.next();
            nbSentences +=getNbSentences(word);
            count++;
        }
        System.out.println("Number of Words: "+ count);
        System.out.println("Number of Sentences: " + nbSentences);
        System.out.println("Average Words In Sentence: " + (count/nbSentences));
        System.out.println("Longest Sentence: ");
        System.out.println("Shortest Sentence: ");
 }
 //**************************number of sentences*********************************
 public static int getNbSentences(String word) 
 {         int result = 0;
       char[] chars = word.toCharArray();
       for(Character c : chars) 
       {    if(c == '.' || c == '!' || c == '?') 
            {   result++; 
            }
       }
       return result;
 }
 //*************************Longest Sentence*************************************


 //This is where I'm stuck....

}

誰かが助けることができれば、私はそれを高く評価します!!

4

4 に答える 4

1

疑似コード:

  1. 最初の文を最長と最短に設定します。
  2. すべての文を繰り返し、最短および最長と比較します。
  3. 最短より短い文を見つけた場合は、最短として使用してください。
  4. 最長より長い文を見つけた場合は、最長として使用してください。
于 2013-03-06T09:41:28.630 に答える
1
  1. 初期化int currentSentenceLength = 0int maxSentenceLength = 0てループの外に出ます。
  2. ごとにword: 増分しますcurrentSentenceLength
  3. wordが含まれている場合.!または次の?ことを行います。maxSentenceLength = Math.max(currentSentenceLength, maxSentenceLength); currentSentenceLength = 0;
  4. 戻るmaxSentenceLength

最短の文でも同じことができます。

于 2013-03-06T09:43:13.643 に答える
1

以下のコードは、テキスト ファイルから行番号とともに最長および最小の行を検索します (制限: 2 つの行が同じ場合、最初の行を長い行または短い行と見なします)。行を保存するためにHashMapを使用しました(キーとして行番号、値として行コンテンツ)

このコードに何か追加する必要がある場合は、投稿してください。

` パッケージテスト;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class LongestAndShortestLineFinder {

static int previousLongLine = 0;
static int previousShortLine = 10000;

public void printLongLine(HashMap longLineMap) {

    Set keyofSet = longLineMap.keySet();
    Iterator itr = keyofSet.iterator();
    while (itr.hasNext()) {
        Integer keys = (Integer) itr.next();
        String value = (String) longLineMap.get(keys);
        System.out.println("Line Number of Longest line: " + keys
                + "\nLongest line: " + value);
    }
}

public void printShortLine(HashMap shortLineMap) {

    Set keyofSet = shortLineMap.keySet();
    Iterator itr = keyofSet.iterator();
    while (itr.hasNext()) {
        Integer keys = (Integer) itr.next();
        String value = (String) shortLineMap.get(keys);

        System.out.println("Line Number of Shortest line: " + keys
                + "\nShortest line: " + value);
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String fileName = "d:\\test.txt";
    // This will reference one line at a time
    String line = null;
    int key = 0;
    int lineSize = 0, lineNumber = 0;

    LongestAndShortestLineFinder ln = new LongestAndShortestLineFinder();

    HashMap longLineMap = new HashMap();
    HashMap shortLineMap = new HashMap();

    try {
        // FileReader reads text files in the default encoding.
        FileReader fileReader = new FileReader(fileName);

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while ((line = bufferedReader.readLine()) != null) {
            lineNumber++;
            lineSize = line.length();
            if (lineSize > previousLongLine) {
                previousLongLine = lineSize;
                longLineMap.clear();
                longLineMap.put(lineNumber, line);
            }
            if (lineSize < previousShortLine) {
                previousShortLine = lineSize;
                shortLineMap.clear();
                shortLineMap.put(lineNumber, line);
            }

        }
        // Always close files.
        bufferedReader.close();
    } catch (FileNotFoundException ex) {
        System.out.println("Unable to open file '" + fileName + "'");
    } catch (IOException ex) {
        System.out.println("Error reading file '" + fileName + "'");
        // Or we could just do this:
        // ex.printStackTrace();
    }

    ln.printLongLine(longLineMap);
    ln.printShortLine(shortLineMap);
}

 }

`

于 2014-06-22T17:52:25.017 に答える
0

ソースコードによると、あなたがする必要があるのは、文の単語数を取得することです。次に、現在の最小/最大単語数をセンテンスストアに格納する変数を更新するか、センテンスの単語数をコレクションとして分類して、最大、最小(最終的には平均)の事後分析を取得できます。

明示的に:mainメソッドの対応する行を次のように変更します

double count = 0;
int nbSentences = 0;
int nbWordsInASentence = 0;
Collection nbWordsInSentences = new ArrayList<Integer>();
while (in.hasNext())
{   String word = in.next();
    count++;
    nbWordsInASentence++;

    int incrementNbSentences = getNbSentences(word);
    if (incrementNbSentences > 0) {
        nbWordsInASentence.add(nbWordsInASentence);
        nbWordsInASentence = 0;
    }
}

int maxSentenceLength;
int minSentenceLength;
if (nbWordsInSentences.size() > 0)
{   maxSentenceLength = Collections.max(nbWordsInSentences);
    minSentenceLength = Collections.min(nbWordsInSentences);
}
else
{   maxSentenceLength = 0; // use whatever value seems appropriate
    minSentenceLength = 0; // use whatever value seems appropriate
}

ただし、これは、からの結果getNbSentencesが1より大きくならない場合にのみ機能します(これは、入力引数が単語であるという事実によって暗示されます)。

getNbSentences一時停止マークの場合、メソッドの実装は仮説が当てはまらない可能性があることに注意してください。この場合、メソッドは3を返します。

于 2013-03-06T09:41:54.697 に答える