-1

我正在编写一个程序,该程序应该计算段落或字符串的 Flesch 指数,并告诉理解所需的最低教育水平。

应该发生的是一个人输入一个想要计算的字符串,程序应该计算单词的数量并计算句子的数量,以及遍历每个单词并计算其中有多少个音节单词并将其添加到总音节计数器中。计算音节的方法是计算一个单词中相邻元音的个数,例如“Computer”有元音o、u、e等3个音节。但是,如果单词以字母 e 结尾,则从总音节数中减去 1,因此“段落”有 a、a 和 e,但由于 e 在末尾,因此音节数为 2。

这是我到目前为止得到的:

// Import scanner to get input from the user
import java.util.Scanner;

public class Flesch
{ 
  public static void main (String [] args)
  {
    public static final double BASE = 206.835;
    public static final double WORD_LENGTH_PENALTY = 84.6;
    public static final double SENTENCE_LENGTH_PENALTY = 1.015;

    Scanner input = new Scanner (System.in);

    // Declare variables for syllables and words
    int totalWords = 0;
    int totalSyllables = 0;

    // Prompt user for a passage of text
    System.out.println ("Please enter some text:");
    String passage = input.nextLine();

    // Words
    for (int i = 0; i < passage.length(); i++)
    {
      if (passage.charAt(i) == ' ') {
        totalWords++;
      }
      else if (passage.charAt(i) == '.') {
        totalWords++;
      }
      else if (passage.charAt(i) == ':') {
        totalWords++;
      }
      else if (passage.charAt(i) == ';') {
        totalWords++;
      }
      else if (passage.charAt(i) == '?') {
        totalWords++;
      }
      else if (passage.charAt(i) == '!') {
        totalWords++;
      }
    } 



    System.out.println ("There are " + totalWords + " words.");

    char syllableList [] = {'a', 'e', 'i', 'o', 'u', 'y'};

    // Syllables
    for (int k = 0; k < syllableList.length; k++)
    {
      for (int i = 0; i < passage.length(); i++)
      {
        if (passage.charAt(i) == syllableList[k]) {
          totalSyllables = totalSyllables + 1;
        } 
        if (lastChar(passage) == 'E' || lastChar(passage) == 'e') {
          totalSyllables = totalSyllables - 1;
        } else {
          break;
        }
      }
    }    
    System.out.println ("There are " + totalSyllables + " syllables.");
    input.close();

    public static char lastChar (String aWord)
    {
      char aChar = aWord.charAt(aWord.length() - 2);
      System.out.print (aChar);
      return aChar;
    }

    /** Return true if the last character in the parameter word is
      * a period, question mark, or exclaimation point, and false
      * otherwise
      **/
    public static boolean sentenceEnd (String word)
    {
      if (lastChar(passage) == '.') {
        return true;
      } else if (lastChar(passage) == '?') {
        return true;
      } else if (lastChar(passage) == '!') {
        return true;
      } else {
        return false;
      }
    }

    double fleschIndex = BASE - WORD_LENGTH_PENALTY * (totalSyllables / totalWords) - SENTENCE_LENGTH_PENALTY * (totalWords / totalSentences);

    if (fleschIndex > 100) {
      educationLevel = "4th grader";
    } else if (fleschIndex <= 100) {
      educationLevel = "5th grader";
    } else if (fleschIndex <= 90) {
      educationLevel = "6th grader";
    } else if (fleschIndex <= 80) {
      educationLevel = "7th grader";
    } else if (fleschIndex <= 70) {
      educationLevel = "8th grader";
    } else if (fleschIndex <= 60) {
      educationLevel = "9th grader";
    } else if (fleschIndex <= 50) {
      educationLevel = "high school graduate";
    } else if (fleschIndex <= 30) {
      educationLevel = "college graduate";
    } else if (fleschIndex < 0) {
      educationLevel = "law school graduate";
    }

    System.out.println ("The Flesch idex is " + fleschIndex + ".");
    System.out.println ("The text can be understood by a " + educationLevel + ".");
  }
} 

我不断收到一些奇怪的错误消息,告诉我在布尔声明周围加上分号,这对我来说毫无意义。

4

1 回答 1

0

在我看来,您混淆了您的方法。

方法 sentenceEnd 和 lastChar 在 main 方法中。这是不允许的。它们必须在主方法之外,但在 Flesch-Class 之内。

于 2014-09-24T15:18:11.747 回答